如何在没有导航栏的情况下获得UIView的高度?

时间:2012-02-17 15:36:35

标签: objective-c cocoa-touch uiview

我正在尝试在一个干净的UIViewController中添加一个UIWebView,它在我的Storyboard中嵌入了一个导航控制器:

UIWebView *webView =[[UIWebView alloc] initWithFrame:self.view.bounds)];
webView.delegate = self;
[self.view addSubview:webView];

问题是,self.view.bounds.size.height是460,它似乎是整个视图的高度,包括导航栏。我可以减去self.view.frame.origin.y的值,它是20,得到440的所需高度,但是有更常见的方法吗?

修改

请在此处查看我的小代码示例:http://uploads.demaweb.dk/WebViewTest.zip

当您向下滚动到UIWebView的底部时,Web站点的最后部分不会显示,因为webView是高的。

![在此处输入图片说明] [1]

5 个答案:

答案 0 :(得分:2)

<强>解决方案

在UIWebView中设置autoresizingMask解决了我的问题:

self.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;

答案 1 :(得分:0)

默认高度为480,460 - 没有状态栏的高度。 44px - 导航栏的高度(你可以访问高度,因为它是UIView - navBar.frame.size.height)。因此,您的视图高度为480-20-44 = 416.您需要从self.view.frame.size.height减去origin.y

答案 2 :(得分:0)

不要担心。导航控制器负责调整其管辖范围内视图控制器的view的大小。您只能覆盖此视图的框架,如果您希望它是例如更小以适应其超级视图的其他子视图。

答案 3 :(得分:0)

答案 4 :(得分:0)

除了使用topLayoutGuide(以及可选bottomLayoutGuide)之外,我还没有找到更好的解决方案。

即,将您的视图添加到控制器的self.view并设置这些约束:

"H:|[view]|"
"V:[top][view][bottom]"

topself.topLayoutGuidebottomself.bottomLayoutGuide

例如,请参阅AutolayoutHelper中的configureViewController:fillWithSubView:方法。