因此,与iOS 7相比,导航控制器iOS 7中的视图框架似乎有很大不同(我认为很奇怪)。
示例:想象一个UIViewController包含一个UIScrollView(self.scrollView
),该滚动条填充了self.view
struts和spring的全部,并始终填充self.view
。现在,将该UIViewController嵌入到UINavigationController中,并使导航栏保持可见。
在iOS 6中,我观察到以下内容:
self.view.frame.origin
=(0.0, X)
其中X
=状态栏的高度(包含时间,信号栏等。= 20.0
)self.view.frame.size.height
= self.view.bounds.size.height
=总高度减去self.navigationController.navigationBar.frame.size.height
self.scrollView.frame.origin
= self.scrollView.bounds.origin
=(0.0, 0.0)
在iOS 7中,我观察到以下内容:
self.view.frame.origin = (0.0, 0.0)
self.view.frame.size.height
= self.view.bounds.size.height
=总高度(即,嵌入导航控制器时不会降低高度)self.scrollView.bounds.origin
= (0.0, -1 * self.navigationController.navigationBar.frame.size.height)
,但self.scrollView.frame.origin
=(0.0, 0.0)
我的猜测是,这样做是为了使内容可以在导航栏下方继续,以便导航栏可以在iOS 7中显示最少量的模糊+透明度。
问题:self.scrollView
考虑到上面的观察,鉴于self.scrollView.bounds.origin
==,self.scrollView.contentOffset
如何将iOS 7的实际尺寸(宽x高)嵌入iOS的导航控制器中?我是否只需要为iOS 6 v。iOS 7编写不同的代码并检测正在运行的版本?
我真的不想假设屏幕是任何特定大小并对其进行硬编码,因为这似乎是不好的形式...
更新1:我已经上传了我要问的草图。请注意,这种情况下的正确答案是416.0
,在iOS 6中很容易获得,但是我不确定如何在不依赖假设的情况下在iOS 7中获得它。
发生的是,您UITableView
的内容会自动进行调整,以便UINavigationBar
在iOS 7上可以看到内容。这是通过更改中的contentInset
属性来完成的UIScrollView
。因此,要获得不包括导航/状态栏后面部分的框架,您只需要考虑即可contentInset
。
CGRect frame = self.tableView.frame;
frame.origin.y += self.tableView.contentInset.top
frame.size.height -= self.tableView.contentInset.top;
该代码也将在iOS 6上运行,因为self.tableView.contentInset.top
默认为0。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句