美文网首页iOS DeveloperiOS技术中心iOS Developer
Xcode 8中新的 IB 布局的一个坑点

Xcode 8中新的 IB 布局的一个坑点

作者: wwwbbat | 来源:发表于2016-09-14 09:59 被阅读1413次

Xcode8 中使用了新的IB布局,升级到Xcode8后首次打开一个原有的xib、storyboard文件,将会出现这样的提示:

屏幕快照 2016-09-14 09.46.15.png

选择一个默认尺寸来显示布局,这个尺寸可以在IB下方进行修改,十分方便。

这本是一个很好的功能,可是!!!!!!!!!当你将IB改用新版后,在界面未展示前,所有的view的布局都是1000*1000的!!!!!十分的坑人,十分的隐蔽!
其实之前也会有这问题,之前storyboard中如果控制器的size设置为600x600,那么取出来的self.view也将是600x600。但是原来如果view设置了宽高约束,那么取宽高的值将会是正常的值。新版中不管有没有宽高约束,全部是1000x1000。

例如:在viewDidLoad中使用view的frame取到的size是 1000x1000!
在tableView:cellForItemAtIndexPath:中 cell的子view size全部是1000x1000的!

51826DF3-780E-4203-A818-8C6704EEEA45.jpg

下面是解决办法:

在使用frame或者bounds或者center取值前,使用 layoutIfNeeded 强制进行布局。

相关文章

网友评论

  • 3a971dbbfab9:并不是坑,楼主在使用了autolayout的xib中直接拿frame是不可取的的。楼主可知道autolayout提供了方法。
    for example:

    拿高度:
    [self.view systemLayoutSizeFittingSize:UILayoutFittingCompressedSize].height;
  • Cass__:如果是在初始化的initWithCoder中对layoutIfNeeded 似乎是没有用的
  • 死靓仔:Xcode8.1 修复了吗 :sob:
  • 陆宝宝:我也遇到了同样的问题,怎么解决啊,求解。
  • 陈伯君:坑的我好苦啊
  • 十一岁的加重:在使用frame或者bounds或者center取值前,使用 layoutIfNeeded 强制进行布局。
  • malaimoo:确实有点坑
  • monki8:(0,0,1000,1000)坑得我莫名其妙~
  • 简单的一个人:这样子可以获取size,但是正确的x y坐标点还是获取不到
    Amos_W:@简单的一个人 同上,x y还是不对,google了下说是
    在- (void)viewDidLayoutSubviews
    {
    [super viewDidLayoutSubviews];
    }
    里面获取,但是大部分还是获取不到,都说绝逼是一个大bug
  • tiramisuZhen:同坑,这两天找了好久没有解决办法,最后也是像你这么解决的,要么自己根据分辨率强制算出来。。。。关注一下,楼主以后有好办法还望分享哦

本文标题:Xcode 8中新的 IB 布局的一个坑点

本文链接:https://www.haomeiwen.com/subject/rgrvettx.html