iOS UITableViewCell宽度始终是320问题

2019-06-20  本文已影响0人  骑马纵天下

问题:cell宽度一直是320。

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

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


- (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宽度
- (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方法
-(void)setFrame:(CGRect)frame{
    frame.size.width = SCREEN_WIDTH;
    [super setFrame:frame];
}
上一篇 下一篇

猜你喜欢

热点阅读