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

Gob*_*obe 3 xcode objective-c uinavigationbar uitabbar ios7

介绍

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

我有一个UIImageView内部UIScrollView,我试图设置初始scrollView.zoomScale以适应屏幕中的图像,就像股票照片应用程序一样.这意味着:图像不应被裁剪,应尽可能地填满屏幕.

然而,对于我的应用程序,这有点复杂,因为我有可见statusBar,navigationBartabBar.我将采用解决方案来隐藏它们,直到用户触摸屏幕,但我仍然很想知道隐藏的解决方案是不可取的.

到目前为止已完成

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

double heightRelation = self.image.size.height / self.view.frame.size.height;
Run Code Online (Sandbox Code Playgroud)

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

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);
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

PS:Interface Builder的选项"调整滚动视图插入"无效.

Leo*_*ica 10

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