我是iOS开发的新手,所以请原谅无知。
我有2个视图,一个UIWebView
和另一个视图,其中包含用于导航webview中加载的页面的控件(如下所示)。
控制栏有时是隐藏的,我想让UIWebView
动态填充可用空间,无论控件栏是显示还是隐藏。
我如何实现这一目标,以及首选方式(自动布局,编程等)?
答案 0 :(得分:1)
我假设您在故事板中使用了autolayout。您应该在Web视图和工具栏上有七个约束:
这些约束将Web视图的顶部,左侧和右侧边缘固定到根视图;工具栏的左,下,右边到根视图;和Web视图的下边缘到工具栏的上边缘。
您需要将视图控制器中的插座连接到工具栏上的底部约束(屏幕截图中突出显示的约束):
默认情况下,此约束的常量为零,它将工具栏的下边缘固定到根视图的底部。要隐藏工具栏,请将约束的常量设置为工具栏的高度。您可能想要为其设置动画:
- (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];
}];
}
答案 1 :(得分: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)]];
}
您也可以在Storyboard中添加约束,但我不知道如何让gif演示这一点。如果您已经在使用故事板,那么您也应该只考虑这个。
如果要为底栏的位置设置动画,则可能需要保持webView的帧大小同步。使用NSLayoutConstraints会自动发生这种情况;或者您可以在同一动画块中更新Web视图框。
要研究的另一件事是保持网页视图的框架相同,匹配它将出现的最大高度。当您显示并隐藏底栏时,请调整webView.scrollView.contentInset
以更改底部内容填充。