UITableViewAutomaticDimension和多行标签问题

时间:2016-08-09 07:16:19

标签: ios objective-c uitableview

我的表有这个代码(_filters = UITableView)

- (void)viewDidLoad {
    // table data set here ...
    _filters.estimatedRowHeight = 80;
    _filters.rowHeight = UITableViewAutomaticDimension;
}

- (void)viewDidAppear:(BOOL)animated {
    [_filters reloadData];
}

我的自定义单元格中有多行标签。有些行是单行,有些行是多行。我正在使用约束。它运作良好,但问题是什么:

当我打开控制器时,表格会显示一段时间不正确大小的单元格布局,过了一会儿,会显示正确的布局。可能是因为表数据是在viewDidLoad中设置的,然后在viewDidAppear中重新加载表。

可是:

1)如果我从viewDidAppear中删除reloadData,则不会渲染正确的单元格布局(除非表格单元格滚出屏幕)

2)如果我将viewDidLoad中的代码放到viewDidAppear中,与上面的问题相同。不呈现正确的单元格布局。

所以现在我已经渲染了正确的单元格布局,但是在1-2秒内我看到旧的坏单元格布局,所以看起来很难看..

我尝试将以下调用的所有内容放在cellForRowAtIndexPath中,以便在初始加载时具有正确的布局,但没有任何效果。

//[cell setNeedsUpdateConstraints];
//[cell updateConstraintsIfNeeded];
//[cell setNeedsLayout];
//[cell layoutIfNeeded];

任何解决方案?感谢..

iOS8 / 9上存在问题。

1 个答案:

答案 0 :(得分:1)

1。根据Chirag评论,添加此UITableViewDelegateMethod方法

      func tableView(tableView: UITableView, estimatedHeightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
        return UITableViewAutomaticDimension
      }

尝试运行并检查。如果不起作用,那么使用上述方法然后尝试以下步骤。

2.在Storyboard / XIB中删除首选宽度/标签的显式内容宽度

enter image description here

归功于useyourloaf

参考本教程:

http://useyourloaf.com/blog/self-sizing-table-view-cells/

http://openradar.appspot.com/17799811

实施例: https://github.com/kharrison/CodeExamples/tree/master/SelfSize