iOS:使用XIB或者Storyboard文件布局时获取某控件frame的问题

在使用xib或storyboard布局时,经常会用到addSubview某个控件,然后在代码viewDidLoad方法中对该控件的Frame的宽和高设置跟父视图一样时,一般用CGRectGetWidth(父视图.frame)和CGRectGetHeight(父视图.frame)来设置,然而运行后会发现该控件的frame的宽或高并不与父视图一致。设置断点发现和Debug View时发现该控件超出父视图的宽和高了,为什么会这样呢?
分析原因:xib或storyboard在自适应UI时,viewDidLoad方法获得的尺寸是xib或storyboard未完成autolayout适配的尺寸。所以,此时对该控件进行设置Frame时会发现不一致的情况。
解决办法:

  1. autolayout适配后的尺寸在viewDidAppear方法中去获取。这样我们就可以拿到适配后的父视图的Frame,再来对该控件Frame进行设置。
  2. 在layoutSubviews方法中
//不添加这下面两句,获得的尺寸会是xib和storyboard未完成autolayout适配时的尺寸,增加后获取的是适配后的尺寸
[self.contentView setNeedsLayout];
[self.contentView layoutIfNeeded];
//这里获取父视图适配后的Frame

但是考虑到layoutSubviews方法可能会调用到多次的情况,我建议用第1种方法。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容