iOS - 填充可用的垂直空间

时间:2014-10-07 13:07:45

标签: ios

我是iOS开发的新手,所以请原谅无知。

我有2个视图,一个UIWebView和另一个视图,其中包含用于导航webview中加载的页面的控件(如下所示)。

控制栏有时是隐藏的,我想让UIWebView动态填充可用空间,无论控件栏是显示还是隐藏。

我如何实现这一目标,以及首选方式(自动布局,编程等)?

enter image description here

2 个答案:

答案 0 :(得分:1)

我假设您在故事板中使用了autolayout。您应该在Web视图和工具栏上有七个约束:

constraints

这些约束将Web视图的顶部,左侧和右侧边缘固定到根视图;工具栏的左,下,右边到根视图;和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];
    }];
}

答案 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以更改底部内容填充。