美文网首页
iOS 非等高 Cell

iOS 非等高 Cell

作者: 雪波 | 来源:发表于2015-06-05 22:12 被阅读234次

    将文本内容设置为自动换行

    • 设置了Label的左边和上边间距,将其位置定死。
    • Label的lines设置为0行才能正常执行自动换行功能( 我失败的图。。就不贴了
    • 限制Label的换行宽度
      • 我把换行宽度设置成了(屏幕宽度-20个像素)
        // 设置label每一行文字的最大宽度
        // 为了保证计算出来的数值 跟 真正显示出来的效果 一致
        self.contentLabel.preferredMaxLayoutWidth = [UIScreen mainScreen].bounds.size.width - 20;
    
    • 看,可以换行了。只是内容超出了cell的高度,显得十分难看。

    设置自定义cell高度

    • 往模型中添加一个cellHeight 属性,方便保存自定义cell的高度。

    • 在自定义cell中计算当前cell的高度

      • 强制布局,让计算机算出当前cell的高度
      • 根据有无图片的情况,获取cell高度
        [self layoutIfNeeded];  // 强制布局
    
        if (status.picture) {
            status.cellHeight = CGRectGetMaxY(self.pictureView.frame) + 10;
        }else {
            status.cellHeight = CGRectGetMaxY(self.contentLabel.frame) + 10;
        }
    
    • 首先在tabelViewControl 中,给出一个估算高度

    之所以先返回一个大约高度,因为这样能避免 heightForRowAtIndexPath 方法在 cell 被创建之前就多次调用.这样既不会得不到 cell 的高度,也能一定程度优化程序性能.

    - (CGFloat)tableView:(UITableView *)tableView estimatedHeightForRowAtIndexPath:(NSIndexPath *)indexPath{
    
        return 200;
    }
    
    • 然后拿出模型中事先存放好的 cellHeight.
    • 返回每个cell的高度.
    - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
    
        return [self.statuses[indexPath.row] cellHeight];
    }
    
    • 大功告成

    相关文章

      网友评论

          本文标题:iOS 非等高 Cell

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