iOS 当前视图控制器view.frame 在viewDidLoad 和 viewWillAppear 中值不一样问题

今天在项目中遇到了一个奇怪的问题.我使用的测试机是iphone5s,在viewDidload中,当我打印 self.view.frame.size.height 显示是548 ,而不是我们预想的568,然后,我在viewwillappear中打印这个self.view.frame.size.height 结果就变成了568,这就导致了我在viewdidload中创建自定义控件的时候坐标需要参照这个20,这到底是怎么一回事。

经过研究发现,我这个页面使用storyboard 写的,而且父类是UICollectionViewController而不是UIViewController,这才是问题所在。


原来这个问题产生的原因是这样,在viewDidLoad中取得的值是xib或storyBoard中原始的view尺寸,与是否Autolayout或Size Class无关。所以正确的宽度需要在viewWillAppear中取得。但是,有一点值得注意的是 ,当我们使用[UIScreen mainScreen].bounds.size 的时候得到的却是当前屏幕的尺寸。所以,现在我们有两种解决办法:1,在viewwillAppear 中写我们的控件  2,修改我们的参照坐标为  [UIScreen mainScreen].bounds.size。我选择了第二种方法。

如果你有其他的理解或者觉得我理解有误,欢迎留言讨论。


你可能感兴趣的:(iOS开发心得)