iOS7 - 获取UIView的有用高度(不包括statusBar,navigationBar和tabBar)

时间:2014-03-04 18:53:03

标签: objective-c xcode ios7 uinavigationbar uitabbar

简介

这是一个相当常见的问题,但我有一些额外的观点需要注意。其中之一就是我不想让我的酒吧不透明。我喜欢iOS7半透明条。

我在UIImageView内有一个UIScrollView,我正在尝试设置初始scrollView.zoomScale以使图像适合屏幕中的图片,就像照片应用库存一样。这意味着:图像不应被裁剪,应尽可能地填满屏幕。

然而,对于我的应用,由于我有statusBarnavigationBartabBar,因此这有点复杂。我会采用解决方案来隐藏它们,直到用户触摸屏幕,但我仍然对于隐藏不可取的解决方案感到好奇。

到目前为止

我正在根据图像高度和视图高度之间的关系计算缩放:

double heightRelation = self.image.size.height / self.view.frame.size.height;

将1 / heightRelation应用于scrollView.zoomScale后,图像仍然大于有用空间。然后我从文档中找到了statusBar(20pt),tabBar(49pt)和navigationBar(44pt)的iOS7默认高度,还来自:

NSLog(@"status : %f", CGRectGetHeight([[UIApplication sharedApplication] statusBarFrame]));
NSLog(@"tab : %f", self.tabBarController.tabBar.frame.size.height);
NSLog(@"nav : %f", self.navigationController.navigationBar.frame.size.height);

...在玩了一会儿之后,我发现确切的组合是从视图的高度减去statusBarnavBar高度:

double heightRelation = self.image.size.height / (self.view.frame.size.height - CGRectGetHeight([[UIApplication sharedApplication] statusBarFrame]) - self.navigationController.navigationBar.frame.size.height);

这适用于肖像模式,但不适用于横向模式。我知道我也可以根据方向设置缩放条件但是...代码可能会变得不必要的丑陋。

所以我问你:获得有用身高的最佳方法是什么?

P.S。:Interface Builder的选项“调整滚动视图插图”无效。

1 个答案:

答案 0 :(得分:10)

请勿直接使用酒吧。使用视图控制器的lengthbottomLayoutGuide的{​​{1}}属性来确定在条形图下“浪费”了多少视图。这些考虑了导航栏,工具栏,状态栏,标签栏等,并且在调整条形图时由系统维护(例如,在电话/窗格惯用法上旋转到横向后)。