iOS UITableViewCell宽度始终是320问题

问题:cell宽度一直是320。

原因: 初始化cell是会先找xib中找cell有就返回,xib cell默认宽度就是320。没有创建一个空白cell宽度也是320,这些都是在cell初始化前,初始化前cell的宽高默认就是320,44。cell的实际宽高需要在cell显示之后比如:

或者是启动图没有设置正确,检车启动图

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier{
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
if (self) {
NSLog(@"size == %@",NSStringFromCGSize(self.frame.size));
}
return self;
}

2019-06-06 14:13:22.503870+0800 PICC[19304:516844] size == {320, 44}

- (void)layoutSubviews{
[super layoutSubviews];
NSLog(@"size == %@",NSStringFromCGSize(self.frame.size));
}
2019-06-06 14:13:22.544332+0800 PICC[19304:516844] size == {414, 44}

解决办法:

1. 在layoutSubviews方法中写代码约束,更新坐标等。
2. 或者在cell初始化时修改cell宽度
1
2
3
4
5
6
7
8
9
10
- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier{
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
if (self) {
self.frame = CGRectMake(0, 0, SCREEN_WIDTH, 44);

NSLog(@"size == %@",NSStringFromCGSize(self.frame.size));
}
return self;
}
2019-06-06 14:24:18.725489+0800 PICC[19425:561276] size == {414, 44}
3. 重写cell的frame方法
1
2
3
4
-(void)setFrame:(CGRect)frame{
frame.size.width = SCREEN_WIDTH;
[super setFrame:frame];
}
-------------本文结束感谢您的阅读-------------
坚持原创技术分享,您的支持将鼓励我继续创作!