我有两个视图,一个UIWebView和一个UITableView,我以编程方式扩展它们的高度。这两个视图都位于UIScrollView中。 WebView和TableView都禁用了滚动,ScrollView及其父视图的Autoresize Subviews已关闭。我尝试做的是将项目的高度扩展到适当的大小,然后将ScrollView的内容大小扩展为两个项目的总和。现在有效。但是,只要我将TableView和WebView重置为原始高度,ScrollView就会保持其新的内容大小。
我正在使用以下代码更改webViewDidFinishLoad中的高度。
// Set the webview height //
webView.frame = CGRectMake(
webView.frame.origin.x
, webView.frame.origin.y
, webView.frame.size.width
, webView.scrollView.contentSize.height);
[webView setTranslatesAutoresizingMaskIntoConstraints:NO];
[webView addConstraint:[NSLayoutConstraint
constraintWithItem:webView
attribute:NSLayoutAttributeHeight
relatedBy:NSLayoutRelationEqual
toItem:nil
attribute:NSLayoutAttributeNotAnAttribute
multiplier:1.0
constant:webView.scrollView.contentSize.height]];
webView.scrollView.scrollEnabled = NO;
webView.scrollView.bounces = NO;
// Set the table height and location //
self.myTableView.frame = CGRectMake(self.myTableView.frame.origin.x
, webView.frame.origin.y + webView.scrollView.contentSize.height + 8
, webView.frame.size.width
, [tableRows count] * 40);
[self.myTableView setTranslatesAutoresizingMaskIntoConstraints:NO];
[self.myTableView addConstraint:[NSLayoutConstraint
constraintWithItem:self.myTableView
attribute:NSLayoutAttributeHeight
relatedBy:NSLayoutRelationEqual
toItem:nil
attribute:NSLayoutAttributeNotAnAttribute
multiplier:1
constant:[tableRows count] * 40]];
// Update the scrollview //
CGSize newSize = CGSizeMake([UIScreen mainScreen].bounds.size.width, webView.frame.size.height + self.myTableView.frame.size.height);
[super updateViewConstraints];
[self.myScrollView setContentSize:newSize];
我猜我在某个地方错过了一步。
答案 0 :(得分:1)
我设法弄清楚出了什么问题。在ScrollView中,setTranslatesAutoresizingMaskIntoConstraints
需要设置为YES
。默认为NO
,因此删除该行无效,必须明确设置为YES
答案 1 :(得分:0)
您遇到的问题是您尝试同时使用静态帧和约束。这不起作用,这就是为什么tableView和webView的帧恢复到初始值的原因。
使用约束进行此操作会稍微复杂一点,但如果您只使用静态帧并删除您按代码添加的约束,则所有这些都应该可以正常工作。
祝你好运!