动态UIView高度与iOS 6中的自动布局

在过去的几天里,我试图用自动布局约束完成一个相当简单的(至少应该是)布局,但没有成功。

我的视图层次是:
UIScrollView中
- UIView(容器视图)
----- UILabel(多行标签)
-----一个UIWebView
-----的UILabel
-----的UIButton

在IB中查看层次结构

所需的功能是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

上一篇: Dynamic UIView height with auto layout in iOS 6

下一篇: UITextView that expands to text using auto layout