美文网首页
xib定义的view,无法适配屏幕宽度

xib定义的view,无法适配屏幕宽度

作者: 小小小Lucky | 来源:发表于2019-08-10 18:19 被阅读0次

    在的storyboard的tableview中使用了xib自定义的cell,但显示出来的宽度不能自适应屏幕。

    解决办法:

    1、在xib文件中,去掉使用AutoLayout。(否则步骤2不起作用)

    2、在cell里面重写layoutSubviews这个方法时,需要调用[super layoutSubviews]。在layoutSubviews方法中用代码去适配cell上各个部分frame。

    ---------------------

    版权声明:本文为CSDN博主「wsjshx」的原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接及本声明。

    原文链接:https://blog.csdn.net/wsjshx/article/details/50363657

    我们在使用纯代码的时候一般都喜欢写一个setupUI来做譬如切边之类的事情.

    纯代码一般都不会出现错误.

    比如我们把一个cell写成了xib.那么他就不会走

    - (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier;

    这个方法.而走的是

    - (void)awakeFromNib;

    这个方法.

    在纯代码中,我们可以直接判断

    - (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {

        if (self = [superinitWithStyle:style reuseIdentifier:reuseIdentifier]) {

            [selfsetupUI];

        }

        returnself;

    }

    中间的setupUI方法就是我们各种切边之类的UI操作的方法.

    但是如果我们走的是xib.那不好意思.如果直接在

    - (void)awakeFromNib;

    这个方法中直接self setupUI那么就会出现屏幕不适配的问题

    网上很多的解决方案让大家把autolayout勾选去掉.但是我觉得这样就失去了xib本身的优势.毕竟取消勾选的话约束就全部失去了.

    所以我们就通过系统的调用顺序来解决

    从上图可以看出来.系统会先调用awakeFromNib.然后用layoutSubViews来进行二次布局.

    我们在layoutSubViews里面先super 调用父类方法.然后setupUI就能够完成我们不把xib约束变成手写代码的需求了.

    ---------------------

    版权声明:本文为CSDN博主「MeteoriteMan」的原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接及本声明。

    原文链接:https://blog.csdn.net/qq_18683985/article/details/77117222

    相关文章

      网友评论

          本文标题:xib定义的view,无法适配屏幕宽度

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