在的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