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

在的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,无法适配屏幕宽度)