美文网首页
iOS autolayout自适应高度

iOS autolayout自适应高度

作者: 某某香肠 | 来源:发表于2019-03-24 23:38 被阅读0次

    上一个需求中遇到了一些自适应高度的坑(主要是label的适配),在这里分享一下自适应高度的一些心得。正好为下一个feed流的需求作准备。

    tableViewCell自适应高度

    设置约束时,要确保上下有一条贯通的约束线,如果是xib文件,因为视图高度是固定的,另外贯通的约束线也确定一个高度,如果两个不一样,则会报错。因此最好先把高度调整好再添加约束。
    除此之外,需要添加以下代码

        //高度自适应
        self.tableView.rowHeight = UITableViewAutomaticDimension;
        //填一个估算值
        self.tableView.estimatedRowHeight = 40;
    

    tableHeadView/FootView自适应高度

    和tableViewCell一样,这两个view都得确保有一条贯通的约束线。但是,仅靠约束是不能实现高度自适应的,需要手动设置frame:

    -(void)viewDidLayoutSubviews {
        [super viewDidLayoutSubviews];
        CGRect viewRect = self.tableView.tableHeaderView.frame;
        
        viewRect.size.height = [self.tableView.tableHeaderView systemLayoutSizeFittingSize: UILayoutFittingCompressedSize].height;
        
        self.tableView.tableHeaderView.frame = viewRect;
    }
    

    存在UILabel的情况

    UILabel是可以自适应行高的,但在配合自动布局时,需要作如下配置:

        self.label.preferredMaxLayoutWidth = 95;
    

    这是因为在某些系统上自动布局在计算高度的时候无法知道label的文字排版,无法计算label的高度,从而导致整体布局的时候出现偏差(比如label被压缩),这个时候需要加上这句提供label上一行的最大宽度。

    另外,如果再cell上的label作文本的展开/收起操作,在这个操作之后需要刷新该行的cell才能改变高度,如果数据源没变仅更新高度,可以用[self.tableView beginUpdates]/[self.tableView endUpdates]进行刷新。

    相关文章

      网友评论

          本文标题:iOS autolayout自适应高度

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