【问题标题】:iOS7 - Get UIView's useful height (excluding statusBar, navigationBar and tabBar)iOS7 - 获取UIView的有用高度(不包括statusBar、navigationBar和tabBar)
【发布时间】:2014-03-04 18:53:03
【问题描述】:

简介

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

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

但是对于我的应用程序来说,这有点复杂,因为我可以看到 statusBarnavigationBartabBar。在用户触摸屏幕之前,我将采用隐藏它们的解决方案,但是当不希望隐藏时,我仍然对解决方案感到好奇。

到此为止

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

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

scrollView.zoomScale 应用 1/heightRelation 后,图像仍然大于可用空间。然后我从文档中找到了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 的“调整滚动视图插图”选项无效。

【问题讨论】:

    标签: objective-c xcode ios7 uinavigationbar uitabbar


    【解决方案1】:

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

    【讨论】:

    • (很晚的评论)谢谢!还应注意,当为顶栏和底栏设置“延伸边缘”时,这会更好。
    猜你喜欢
    • 1970-01-01
    • 2013-10-17
    • 1970-01-01
    • 2012-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-03
    相关资源
    最近更新 更多