2014-10-07 106 views
0

我是iOS開發新手,所以請原諒無知。iOS - 填充可用垂直空間

我有2次,一個UIWebView和含有控制用於導航在web視圖加載的頁另一個視圖(如下所示)。

控制欄有時隱藏,我希望UIWebView動態填充可用空間,無論控制欄是顯示還是隱藏。

我怎樣才能做到這一點,什麼是首選的方式(自動佈局,程序等)?

enter image description here

+0

你在代碼中創建或在故事板或XIB看法? – 2014-10-07 19:32:39

+0

在故事板中。 – Steve 2014-10-08 13:50:37

回答

1

我假設你在你的故事板使用自動佈局。你應該對Web視圖7個約束和工具欄:

constraints

這些約束針頂部,左側,在網絡上查看到根視圖的右邊緣;工具欄的左邊,底部和右邊到根視圖;和Web視圖的底部邊緣到工具欄的頂部邊緣。

你需要一個出口在您的視圖控制器連接到底層約束工具欄(在屏幕截圖高亮約束)上:

outlet to toolbar bottom constraint

這個約束的常量在默認情況下,該引腳零工具欄的底部邊緣到根視圖的底部。要隱藏工具欄,請將約束的常量設置爲工具欄的高度。你可能想製作動畫:

- (void)hideToolbar { 
    [UIView animateWithDuration:0.2 animations:^{ 
     self.toolbarBottomConstraint.constant = self.toolbar.frame.size.height; 
     [self.view layoutIfNeeded]; 
    }]; 
} 

要顯示工具欄,設置約束的不斷回零:

- (void)showToolbar { 
    [UIView animateWithDuration:0.2 animations:^{ 
     self.toolbarBottomConstraint.constant = 0; 
     [self.view layoutIfNeeded]; 
    }]; 
} 
0

你可以有幾種方法做到這一點;最好的方法是與你之前在項目中使用的任何編碼實踐相結合。

你可以改變在layoutSubviews框架:

- (void)layoutSubviews { 
    CGRect frame = self.webView.frame; 
    frame.size.height = self.bottomBar.frame.origin.y; 
    self.webView.frame = frame; 
} 

你可以添加約束:

- (void)loadView { 
    [self.webView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:[_webView]-[_bottomBar]" options:0 metrics:nil views:NSDictionaryOfVariableBindings(_webView, _bottomBar)]]; 
} 

你可以在故事板添加約束爲好,但我不知道如何做一個gif證明了這一點。如果你已經在使用Storyboard,你也應該只考慮這一點。

如果你動畫底欄的位置,你可能會想保留的網頁視圖的幀大小同步。使用NSLayoutConstraints會自動發生這種情況;或者您可以更新同一個動畫塊中的Web視圖框架。

另一件事,調查將保持網頁的框架查看相同,匹配,它會出現在最大高度。當您顯示並隱藏底部欄時,請調整webView.scrollView.contentInset以更改底部內容填充。