美文网首页
systemLayoutSizeFittingSize 高度自适

systemLayoutSizeFittingSize 高度自适

作者: 请叫我魔法师 | 来源:发表于2017-09-24 16:32 被阅读0次

    之前写过一篇它的文章了。不过那个是单纯的demo,这次有个页面又要高度自适应,就重新看了看,再次用它实现高度自适应。第三方的库就不用了。

    首先,cell高度的不一样,都是由cell中label文字的不确定造成的,才产生了cell高度自适应这个问题。因此,label是关键。

    以前解决cell高度问题,是根据label内容先计算label,然后再加上其他的固定高度,返回给代理方法,或者首先计算完所有高度,放到一个数组里,然后直接返回,总共计算一次就行了。不用没返回一次计算一次。这种办法没啥大问题。不过既然系统给了cell高度的计算办法,肯定比自己主动计算效率高。
    这个方法就是systemLayoutSizeFittingSize。

    注意:systemLayoutSizeFittingSize这个方法是cell.contentView调动,返回的contentView的size,所以最后+1,分割线的高度。
    并且必须有实例对象调用,所以做一个全局变量self.temCell,不用每次调用都新建cell对象。

    - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
        
    //    模拟的数据
        if (indexPath.row % 2) {
            
            self.temCell.contentLab.text = @"我们睡觉族自然也没闲着,每天早晨从中午开始,当一天和尚撞一天钟或者干脆连钟都不撞。上厕所、吃饭,看NBA、打篮球,上网、约会;各有各的一份事做。天天如此,日子也就在这些单调无聊的事情中被消耗。回过头来看看强哥,那才真叫一个收获满满。拿到了国家英语四六级证书,计算机二级证书,普通话一级乙等证书等各类证书,国家奖学金,以及保送研究生的资格。";
        }else{
            self.temCell.contentLab.text = @"除了这些能看得到的收获,强哥还有一件更牛逼的本领,那就是精通计算机。组装,修理,装系统,制作表格,处理照片,以及各类软件,均不在话下。因此,他想找份工作,易如反掌因此";
        }
        
    //    先确定label的最大宽度,根据自己需求确定宽度
        CGFloat preMaxWaith = SCREENWIDTH - 96;
        [self.temCell.contentLab setPreferredMaxLayoutWidth:preMaxWaith];
        
    //    直接返回cellsize,最后+1,是cell分割线的高度
        CGSize cellSize = [self.temCell.contentView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize];
        return cellSize.height + 1;
    }
    
    

    效果如图

    结果.png

    PS: 多个label的情况,有空接着试试。

    相关文章

      网友评论

          本文标题:systemLayoutSizeFittingSize 高度自适

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