自定义UITableViewCell重新加载了新数据,但未使用新数据绘制

时间:2016-02-06 08:50:01

标签: ios iphone uitableview redraw

我有一个具有以下结构的自定义uitableviewcell

customCell
  Content View
    vertical Stack View
      title Label
      horizontal Stack View
        Label
        Label
      horizontal Stack View
        Label
        Label

点击时,会有一个细节视图控制器的segue。回来时,我在主任务中重新加载tableView。

我看到以下情况发生:

一个。没问题:

  1. 表格视图为空,我按下添加按钮
  2. 详细信息编辑器打开,编辑所有标签的数据
  3. 返回UITableView
  4. - >绘制一切 - >没问题。
  5. 在编辑相应内容时重新绘制新数据。
  6. B中。问题

    1. 表格视图为空,我按下添加按钮
    2. 详细信息编辑器打开,编辑前3个标签的数据,而不是底部的2个标签
    3. 返回UITableView
    4. - >绘制已编辑的标签,调整布局以使底部水平堆栈视图不占空间
    5. 再次转到同一单元格的详细编辑器,为底部2个标签添加文字
    6. 返回表格视图控制器
    7. - >问题:底线仍未绘制
    8. 但调试器显示单元格已呈现且数据可用且标签文本已设置
    9. 我在主线程中调用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
      }
      

      它永远不会进入后备路径

1 个答案:

答案 0 :(得分:0)

我看到单元格的布局过程在包含空标签时优化了底线(text == nil)

前两行获得更多垂直空间。

稍后设置标签文本时,布局过程不会反转。 setNeedsLayout()没有帮助。因此,即使在重绘时包含数据,底线仍然会被优化掉。

解决方法:

永远不要在单元格中将标签文本设置为nil。将其设置为" "没有数据的时候。

现在,底线永远不会被优化掉。一个空的空间仍然表示还没有设置。