【发布时间】:2016-02-06 08:50:01
【问题描述】:
我有一个具有以下结构的自定义 uitableviewcell
customCell
Content View
vertical Stack View
title Label
horizontal Stack View
Label
Label
horizontal Stack View
Label
Label
点击有一个细节视图控制器的segue。回来后,我在主任务中重新加载 tableView。
我看到发生了以下情况:
A.没问题:
- 表格视图为空,我按下添加按钮
- 详细信息编辑器打开,编辑所有标签的数据
- 返回 UITableView
- -> 绘制所有内容-> 没问题。
- 在编辑相应内容时使用新数据重绘。
B.问题
- 表格视图为空,我按下添加按钮
- 详细信息编辑器打开,编辑前 3 个标签的数据,而不是底部 2 个标签的数据
- 返回 UITableView
- -> 绘制已编辑的标签,调整布局以使底部水平堆栈视图不占空间
- 再次进入同一个单元格的详细信息编辑器,为底部 2 个标签添加文本
- 返回表格视图控制器
- -> 问题:底线仍未绘制
- 但调试器显示单元格已渲染且数据可用且标签文本已设置
我在主线程中调用 reloadData()。不这样做通常是导致 UITableViewCells 更新丢失的原因。在这种情况下不是。
-> 我有一个解决方法,请参阅下面的答案。应用此解决方法可以解决问题。
按要求编辑:
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier(workoutCellIdentifier2, forIndexPath: indexPath) as! WorkoutTableViewCell
let workout = appDelegate.persistence.workouts[indexPath.row]
cell.setWorkout(workout, healthData: appDelegate.healthData)
return cell
}
它永远不会进入后备路径
【问题讨论】:
-
您能出示您的
cellForRowAtIndexPath代码吗? -
还有你的
heightForRowAtIndexPath。您是否考虑过将两个堆栈视图放在垂直堆栈视图中,然后根据需要隐藏/取消隐藏较低的水平堆栈视图 -
你在下面看到我的回答了吗?
-
隐藏/取消隐藏不是必需的。它是由一些 Apple 代码自动完成的。这就是问题的原因。
-
dequeueReusableCellWithIdentifier:forIndexPath永远不会返回 nil,因此它永远不会采用回退路径。您是否正确地重新配置了setWorkout或prepareForReuse中的单元格?
标签: ios iphone uitableview redraw