ios - UITableViewAutomaticDimension 和多行标签问题

标签 ios objective-c uitableview

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

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

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

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

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

但是:

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

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

所以现在我渲染了正确的单元格布局,但是大约 1-2 秒我看到旧的错误单元格布局,所以它看起来很难看..

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

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

有什么解决办法吗?谢谢..

问题都在 iOS8/9 上。

最佳答案

1. 根据 Chirag 的评论,添加这个 UITableViewDelegateMethod 方法

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

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

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

enter image description here

信用去使用你的面包

引用本教程:

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

http://openradar.appspot.com/17799811

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

关于ios - UITableViewAutomaticDimension 和多行标签问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38844404/

相关文章:

ios - 使用 UISearchbar 和过滤后自定义新表

objective-c - 是否有一种简单的方法(在 Cocoa/iOS 中)将方法调用排队,以便在下一个运行循环中运行一次?

iOS 应用程序在启动前退出

objective-c - 文件从iOS App传输到Mac App?

objective-c - NSURLConnection 下载多张图片

ios - UITableViewCell 包含 UITextView

ios - 如何将 Date(1440156888750-0700) 这样的日期转换为 Swift 可以处理的东西?

objective-c - 更改预定义颜色的不透明度?

objective-c - 返回 NSTextView 的选择属性

ios - 使用 NSURLConnection 异步下载 UITableView 的图像