iOS-UITableViewCell的一些事

weixin_33861800發表於2019-01-25
Q1:點選自己的UITableViewCell,cell上面的UILabel的背景會隱藏,下次又出現的問題?

A1: 如果自己所寫的tableViewCell 上面的UILabel你需要設定圓角和背景,那麼他就會影藏起來,那麼你需要在-(void)layoutSubViews方法中重新設定一遍(小編親測好用)
接下來直接上code

-(void)setDescLabel:(UILabel *)descLabel {
    _descLabel = descLabel;
    _descLabel.textColor = RGB(255, 255, 255, 1);
    _descLabel.font = [UIFont fontWithName:@"PingFangSC-Medium" size: 10];
    _descLabel.textAlignment = NSTextAlignmentCenter;
    _descLabel.layer.backgroundColor = RGB(51, 51, 51, 1).CGColor;
    _descLabel.layer.cornerRadius = 10.0;
    _descLabel.layer.masksToBounds = YES;
}
// 解決UILabel背景消失
- (void)layoutSubviews
{
    [super layoutSubviews];
    _descLabel.layer.backgroundColor = RGB(51, 51, 51, 1).CGColor;
    _descLabel.layer.cornerRadius = 10.0;
    _descLabel.layer.masksToBounds = YES;
}
Q2:xib只適用於在靜態頁面中使用;如果在普通頁面中使用,而且你還想設定自定義cell的寬度和圓角等等,就必須是重寫-(void)setFrame:(CGRect)frame這個方法,但是這個方法會影響到你滑動刪除的功能(謹慎使用,如果你的cell沒有用到滑動刪除,那當然就不用考慮到這個問題了)?

A2: 針對xib,小編目前也沒有好的解決方法。所以我的解決方法是在普通頁面不去使用xib,用純程式碼自定義cell,不去重寫-(void)layoutSubViews這個方法,在cell上面新增一層背景View,這樣就能完美的解決所提出的問題了(小編親測好用)
接下來直接上code


-(instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier{
    if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) {
        // 點選沒有顏色改變
        [self setSelectionStyle:UITableViewCellSelectionStyleNone];
        self.backgroundColor = [UIColor clearColor];
        
        self.bgView2 = [UIView new];
        self.bgView2.layer.cornerRadius = 5;
        self.bgView2.backgroundColor = [UIColor whiteColor];
        _bgView2.frame = CGRectMake(10, 3, (Screen_Width-2*10), 67*Height_Ratio);
        [self.contentView addSubview: self.bgView2];
        
        self.nameLabel = [UILabel new];
        self.nameLabel.frame = CGRectMake(leftMargin*2, leftMargin, (Screen_Width-2*leftMargin)/2, 30);
        [self.contentView addSubview:_nameLabel];
     
        self.propertyLabel = [UILabel new];
        _propertyLabel.frame = CGRectMake(_nameLabel.frame.size.width+_nameLabel.frame.origin.x, _nameLabel.frame.origin.y, (Screen_Width-2*leftMargin)/2-30, 30);
        [self.contentView addSubview:_propertyLabel];
        
        self.assessoryView = [UIImageView new];
        _assessoryView.frame = CGRectMake(_propertyLabel.frame.size.width+_propertyLabel.frame.origin.x, _nameLabel.frame.origin.y+10, 7, 11);
        [self.contentView addSubview:_assessoryView];
    }
    return self;
}
Q3:UITableView滑動cell,介面卡頓的原因及其優化方案?

A3:
介面卡頓的原因是:cell賦值內容時,會根據內容設定佈局,也就可以知道cell的高度,若有1000行,就會呼叫1000次 cellForRow方法,而我們對cell的處理操作,都是在這個方法中賦值,佈局等等,開銷很大。
1> cell上面如果有圖片顯示,那麼下載圖片一定要用縮率圖,一定要進行非同步下載,不然同步下載的話,隨著cell的條數增加,介面就會會卡頓。
2> cell上面的影象和背景儘量使用不透明檢視,因為半透明的檢視需要APP去消耗效能進行渲染
3> cell介面上面的內容不宜太複雜,圖片顯示用小圖,點選檢視用大圖
4> 不要重複建立不必要的cell,儘量重用cell
5> 文字圖片非同步載入,可以使用drawInRect繪製
6> 減少cell的重新整理,儘量使用區域性重新整理
7> 下面兩行程式碼據說可以增加流暢度
cell.layer.shouldRasterize = YES;
cell.layer.rasterizationScale = [UIScreen mainScreen].scale;

未完待續...

相關文章