Ken*_*rty 6 cocoa-touch objective-c uiscrollview ios6 ios7
因此,与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)
where 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
考虑到上面的观察结果,如何将iOS 7中的实际尺寸(宽度x高度)嵌入到导航控制器中,因为self.scrollView.bounds.origin
== self.scrollView.contentOffset
?我是否只需为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;
Run Code Online (Sandbox Code Playgroud)
此代码也适用于iOS 6,因为self.tableView.contentInset.top
默认为0.
归档时间: |
|
查看次数: |
4949 次 |
最近记录: |