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 未重新加载
在 ios 的 UITableView 或 UICollectionView 中重新加载数据的最佳位置是啥