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。我选择了第二种方法。

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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值