Objective c iOS7-获取UIView';s有效高度(不包括状态栏、导航栏和选项卡栏) 介绍

Objective c iOS7-获取UIView';s有效高度(不包括状态栏、导航栏和选项卡栏) 介绍,objective-c,xcode,ios7,uinavigationbar,uitabbar,Objective C,Xcode,Ios7,Uinavigationbar,Uitabbar,这是一个相当常见的问题,但我还有一些额外的观点要注意。其中之一是,我不想让我的酒吧不透明。我喜欢iOS7半透明条 我在uicrollview中有一个UIImageView,我正在尝试设置初始的scrollView.zoomScale以使图像与股票照片应用程序一样适合屏幕。这意味着:图像不应该被裁剪,应该尽可能填满屏幕 但是对于我的应用程序来说,这有点复杂,因为我有可见的statusBar、navigationBar和tabBar。我将采用该解决方案来隐藏它们,直到用户触摸屏幕为止,但我仍然对隐藏

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

我在
uicrollview
中有一个
UIImageView
,我正在尝试设置初始的
scrollView.zoomScale
以使图像与股票照片应用程序一样适合屏幕。这意味着:图像不应该被裁剪,应该尽可能填满屏幕

但是对于我的应用程序来说,这有点复杂,因为我有可见的
statusBar
navigationBar
tabBar
。我将采用该解决方案来隐藏它们,直到用户触摸屏幕为止,但我仍然对隐藏不可取时的解决方案感到好奇

迄今为止已完成 我目前正在根据图像高度和视图高度之间的关系计算缩放:

double heightRelation = self.image.size.height / self.view.frame.size.height;
double heightRelation = self.image.size.height / (self.view.frame.size.height - CGRectGetHeight([[UIApplication sharedApplication] statusBarFrame]) - self.navigationController.navigationBar.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);
。。。玩了一会儿之后,我发现确切的组合是从视图高度减去
statusBar
navBar
高度:

double heightRelation = self.image.size.height / self.view.frame.size.height;
double heightRelation = self.image.size.height / (self.view.frame.size.height - CGRectGetHeight([[UIApplication sharedApplication] statusBarFrame]) - self.navigationController.navigationBar.frame.size.height);
这对纵向模式非常有效,但对横向模式无效。我知道我也可以设定一个条件,根据方向设置缩放,但是。。。代码可能变得不必要的丑陋

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


注意:界面生成器的选项“调整滚动视图插入”无效。

不要直接使用这些条。使用视图控制器的
bottomLayoutGuide
topLayoutGuide
length
属性来确定条形图下“浪费”了多少视图。它们考虑了导航栏、工具栏、状态栏、选项卡栏等,并在调整这些栏的大小时由系统进行维护(例如,在手机/pod习惯用法上旋转为横向后)。

(非常晚的评论)谢谢!还应注意,当为顶部钢筋和底部钢筋设置“延伸边缘”时,这种方法效果更好。