iOS10 View的frame的坑

前几天手机更新了iOS10的系统,也把Xcode更新到了8,解决了一些适配的问题,项目正常地跑起来就没去管。
今天早上偶然打开一个之前比较少用的界面,发现界面计算的高度全乱了,瞬间就懵了。。
PS:这个问题只是出现在用xib或sb搭的界面

不一样的frame

iOS10 之前, 我们在xib文件中拖好控件,设置好约束,拉出控件IBOutlet属性,然后通常就会在viewDidLoad或者viewWillAppear做一些设置跟赋值,甚至碰到一些高度动态的界面,通常也会拉出约束属性,根据控件的frame,然后手动计算constant来计算该页面的实际高度等等操作,这些都能达到我们想要的效果。

但是在iOS 10中,这些似乎都不能正常的执行,原因就是frame的改变。默认情况下,系统会把控件初始化为{0,0,1000,1000},即使你在xib里面设置好位置跟宽高。因此你会发现,在viewDidLoad或者viewWillAppear中一旦使用xxx.frame.size.height或者xxx.frame.origin.y,都会得到1000或者0

Paste_Image.png

解决方法

其实解决方法很简单,就是把你在viewDidLoad里面使用到frame计算或者设置圆角啊什么的代码,用一个私有方法包装起来,例如:- (void)viewDidCalculateInitialFrame 然后

- (void)viewDidLayoutSubviews {
    [super viewDidLayoutSubviews];
    [self viewDidCalculateInitialFrame];
}

之后你会发现,一切又回归正常了!

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

推荐阅读更多精彩内容

  • 因为要结局swift3.0中引用snapKit的问题,看到一篇介绍Xcode8,swift3变化的文章,觉得很详细...
    uniapp阅读 4,537评论 0 12
  • 由于问题设计分类较多,而简书中目录功能不可用,故在此标识分类,可以使用Command+F相关分类名,进行问题查找。...
    丶生如夏花阅读 7,275评论 3 4
  • 收假上班以来,开始并一直坚持奉行“唯读书与跑步不可辜负”,可能真的是被一篇有这样标题的文章触动了,也可能只是因...
    bony阅读 272评论 0 0
  • 重阳节是中国的传统祭祖节,对它的印象最初来自一首诗,九月九日忆山东兄弟,从那时起才知道重阳节的存在。 ...
    撒哈拉的玫瑰阅读 1,094评论 0 0
  • 2015年的时候就听说我们老板晚上不吃饭,因为他人不高,如果再长个大肚子就太有损形象了。所以他贯彻晚上不吃饭原则,...
    乘格帆阅读 247评论 2 1