美文网首页
day10-UITableView-自定不等高的cell-sto

day10-UITableView-自定不等高的cell-sto

作者: js_huh | 来源:发表于2020-06-07 21:19 被阅读0次

    自定不等高的cell-storyboard版 01-无配图
    自定不等高的cell-storyboard版 02-有配图


    是什么?
    因cell的高度,在storyboard的里面固定了.那么当不显示"配图"的情况下,cell的高度就显得太高了,不协调,该怎么办呢?


    答: 第2种方法,直接修改cell的高度 frame 和 storyboard结合方式.
    • 重写cellHeightget方法 // 这是重点,一个巧妙的方式.
      • 强制刷新
      • 更改cell的高度
      • heightForRowAtIndexPath
        • UITableViewDelegate代理方法
        • 设置cell的告诉.
    • 需设置正文label控件的宽度,否则不会换行。
    - (void)awakeFromNib
    {
        [super awakeFromNib];
        //手动设置,lable的宽度,否则不会换行.
        self.txtLbl.preferredMaxLayoutWidth = [UIScreen mainScreen].bounds.size.width - 20;
    }
    

    示例代码:

    - (CGFloat)cellHeight{
        //强制刷新
        [self layoutIfNeeded];
        //有配图时,cell高度=配图的Y + 间距10
        if (self.statu.picture){
            return CGRectGetMaxY(self.pictureImg.frame)+10;
        }else{ //无配图时,cell高度 = 正文的Y + 10
            return CGRectGetMaxY(self.txtLbl.frame)+10;
        }
    }
    
    /*
    heightForRowAtIndexPath -- 里面的cell是临时的cell
    不会显示宽/高,那么需要手动设置最大宽度.
    临时cell 
    (cell没有返回,也就是说没有创建出cell.)
        作用:为了传递indexPath这一行对应的模型数据,
            通过模型数据去布局所有的子控件,
            得到所有子控件的frame,
            进而计算cell的高度.
    */
    StatusCell *cell;
    //设置cell的高度
    - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
        if (cell == nil) {
            cell = [tableView dequeueReusableCellWithIdentifier:ID];
        }
        cell.statu = self.statusData[indexPath.row];
        return cell.cellHeight;
    }
    

    也可以看看

    强制刷新-解读

    相关文章

      网友评论

          本文标题:day10-UITableView-自定不等高的cell-sto

          本文链接:https://www.haomeiwen.com/subject/puxjphtx.html