动态UIView高度与iOS 6中的自动布局
在过去的几天里,我试图用自动布局约束完成一个相当简单的(至少应该是)布局,但没有成功。
我的视图层次是:
UIScrollView中
- UIView(容器视图)
----- UILabel(多行标签)
-----一个UIWebView
-----的UILabel
-----的UIButton
所需的功能是Container视图根据内容的大小进行扩展。 为了增加UIWebView的高度,我使用下面的代码:
- (void)webViewDidFinishLoad:(UIWebView *)webView {
[self.webView sizeToFit];
}
我尝试了许多不同的约束,最合理的约束是:
1.从superview中为第一个标签钉住顶部空间(Event Title)
2.为第一个标签和UIWebView引脚垂直间距
3.为其余元素(即UIWebView - UILabel(事件日期)和UILabel(事件日期) - UIButton)引脚垂直间距
4.容器视图具有低优先级(1)底层垂直空间约束及其超视图
我得到的结果如下:
UIWebView展开但不压下事件日期标签和按钮,并且Container视图也不展开。
任何帮助将不胜感激。
您可以从这里下载示例Xcode项目。
您将webView的高度限制设置为266.这就是Web视图的高度仍然固定的原因。
您可以将此高度约束创建为IBOutlet,例如:
@property (weak, nonatomic) IBOutlet NSLayoutConstraint *webViewHeightConstraint;
然后,当Web视图完成下载内容时,您可以修改高度约束的常量。 Web视图本身由滚动视图组成,所以如果你想获得内容的整体高度:
- (void)webViewDidFinishLoad:(UIWebView *)webView {
self.webViewHeightConstraint.constant = self.webView.scrollView.contentSize.height;
}
或者显然这个也是有效的:
- (void)webViewDidFinishLoad:(UIWebView *)webView {
[self.webView sizeToFit];
self.webViewHeightConstraint.constant = self.webView.frame.size.height;
}
在更新webview内容大小之前,您可能需要延迟。 砌体对于自动布局使用非常有用。
-(void)webViewDidFinishLoad:(UIWebView *)webview{
[self performSelector:@selector(checkContentOnDelay:) withObject:webview afterDelay:0.001];
}
-(void)checkContentOnDelay:(UIWebView *)webview{
CGSize contentSize = webview.scrollView.contentSize;
if (contentSize.height > 2) {
[webview updateConstraints:^(MASConstraintMaker *make) {
make.height.equalTo(contentSize.height);
}];
}else{
[self performSelector:@selector(checkContentOnDelay:) withObject:webview afterDelay:0.01];
}
}
链接地址: http://www.djcxy.com/p/28283.html