iOS为啥只有在重新加载UITableView后才能正确显示UIView

Posted

技术标签:

【中文标题】iOS为啥只有在重新加载UITableView后才能正确显示UIView【英文标题】:iOS why is UIView displayed correctly only after reloading UITableViewiOS为什么只有在重新加载UITableView后才能正确显示UIView 【发布时间】:2015-05-04 07:34:59 【问题描述】:

我正在尝试在UITableViewCell 中插入大量视图。 我添加视图并计算所需的常量。而且我解决不了一个问题。内部标签可以大于一行,当UITableView 仅初始化时,它没有正确显示:一些裁剪的标签、错误的高度等。

但是当我重新加载 tableview 或滚动到底部元素并滚动回不正确的一个单元格时,所有视图都会正确显示。

已编辑

示例:我有 UITableViewCell。每个单元格都包含许多属性(单独的视图)。每个属性视图都有标题(灰色文本)和属性值(又是单个视图)。每个属性值视图可能有不同的高度。而且我假设高度不是第一次计算正确。

当我首先构建 UITableViewCell 时,我会构建所有属性视图,然后将每个视图添加到 Cell 并计算常量。

【问题讨论】:

确保你已经正确设置了 UITableView 的 y 坐标。 您是否实现了 UITableView 委托 `-tableView:heightForRowAtIndexPath:` 来计算指示行的高度(如果可能)?它肯定会让您在标签上调用NSString -boundingRectWithSize: 方法,以便能够从一开始就评估您的单元格所需的高度。 请添加一些您已经完成的代码以便更好地理解 【参考方案1】:

我已经解决了问题。

当我得到 UITableViewCell 时,它的框架宽度为 325,但 tableView 框架宽度为 375。因此,内部视图的构建方式不正确。现在我只是将 Cell 的 contentView 设置为 tableView 框架。

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell 
    let identifier = "ListCell"
    var cell = tableView.dequeueReusableCellWithIdentifier(identifier) as? ListViewCell

    cell!.contentView.frame = tableView.frame

    // additional setup

    return cell!

【讨论】:

以上是关于iOS为啥只有在重新加载UITableView后才能正确显示UIView的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的搜索结果只有在我开始输入后才会显示?

从 iOS 中的 UIView 子视图重新加载时 UITableView 未重新加载

iOS7 UITableview 在重新加载部分/行时很慢

在 ios 的 UITableView 或 UICollectionView 中重新加载数据的最佳位置是啥

UITableView 在 iOS 7.1 上无法正确重新加载

在 iOS 中重新加载特定的 UITableView 单元格