在过去的几天里,我试图使用自动布局约束来完成一个相当简单(至少应该是)的布局,但没有成功。
我的视图层次结构是:
UIScrollView中
- UIView(容器视图)
----- UILabel(多标签)
----- UIWebView的
-----的UILabel
-----的UIButton
所需的functionallity是根据内容的大小进行扩展的Container视图。为了增加UIWebView的高度,我使用以下代码:
- (void)webViewDidFinishLoad:(UIWebView *)webView {
[self.webView sizeToFit];
}
我尝试了许多不同的约束,最合理的约束是:
1.将超级视图的顶部空间固定为第一个标签(事件标题)
2.固定第一个标签和UIWebView的垂直间距
3.固定其余元素的垂直间距(即UIWebView - UILabel(事件日期)和UILabel(事件日期) - UIButton)
4.容器视图具有低优先级(1)底部垂直空间约束及其超级视图
我得到的结果如下:
UIWebView扩展但不会按下事件日期标签和按钮,而且Container视图也不会展开。
非常感谢任何帮助。
您可以下载示例Xcode项目from here.
答案 0 :(得分:71)
您将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;
}
答案 1 :(得分:1)
在更新webview内容大小之前,您可能需要延迟。 masonry对自动布局使用非常有用。
PropertyName="SelectedDataKey.Values["Location"]"