在UIScrollView中滚动后,视图重置为原始界面构建器高度和约束

时间:2015-02-05 19:42:25

标签: ios objective-c uiscrollview

我有两个视图,一个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];

我猜我在某个地方错过了一步。

2 个答案:

答案 0 :(得分:1)

我设法弄清楚出了什么问题。在ScrollView中,setTranslatesAutoresizingMaskIntoConstraints需要设置为YES。默认为NO,因此删除该行无效,必须明确设置为YES

答案 1 :(得分:0)

您遇到的问题是您尝试同时使用静态帧和约束。这不起作用,这就是为什么tableView和webView的帧恢复到初始值的原因。

使用约束进行此操作会稍微复杂一点,但如果您只使用静态帧并删除您按代码添加的约束,则所有这些都应该可以正常工作。

祝你好运!