2015-02-05 40 views
0

我有兩個視圖,一個UIWebView和一個UITableView,以編程方式擴展它們的高度。這兩個視圖都位於UIScrollView中。 WebView和TableView都禁用了滾動功能,並且ScrollView及其父視圖關閉了Autoresize子視圖。我想要做的是將這兩個項目的高度擴大到適當的大小,然後將ScrollView的內容大小擴展到兩個項目的總和。現在這個工作。但是,只要將TableView和WebView重置爲原始高度,但ScrollView將保留其新的內容大小。在UIScrollView中滾動後重置爲原始界面構建器高度和約束的視圖

我使用以下代碼更改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]; 

我猜我錯過了某個步驟。

回答

1

我設法弄清楚什麼是錯的。當在ScrollView中時,需要將setTranslatesAutoresizingMaskIntoConstraints設置爲YES。這是默認的NO,所以刪除該行不起作用,它必須明確設置爲YES

0

您遇到的問題是您嘗試同時使用靜態幀和約束。這是行不通的,也是爲什麼tableView和webView的框架回到它們的初始值的原因。

使用約束進行這項工作會稍微複雜一點,但如果您只是使用靜態框架並刪除您通過代碼添加的約束,則所有應該都可以正常工作。

祝你好運!

相關問題