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

Ios 自定义UITableViewCell使用新数据重新加载,但不使用新数据绘制,ios,iphone,uitableview,redraw,Ios,Iphone,Uitableview,Redraw,我有一个自定义uitableviewcell,其结构如下 customCell Content View vertical Stack View title Label horizontal Stack View Label Label horizontal Stack View Label Label 点击时,会有一个到局部视图控制器的序列。返回时,我将在主任务中重新加载table

我有一个自定义uitableviewcell,其结构如下

customCell
  Content View
    vertical Stack View
      title Label
      horizontal Stack View
        Label
        Label
      horizontal Stack View
        Label
        Label
点击时,会有一个到局部视图控制器的序列。返回时,我将在主任务中重新加载tableView

我看到以下情况:

A.没问题:

  • 表视图为空,我按add按钮
  • 打开详图编辑器,编辑所有标签的数据
  • 返回UITableView
  • ->绘制所有内容->没问题
  • 编辑相应内容时使用新数据重新绘制
  • B.问题

  • 表视图为空,我按add按钮
  • 打开详图编辑器,编辑前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
    }
    

    当单元格包含空标签(text==nil)时,单元格的布局过程将优化底线

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

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

    解决方法:

    切勿在单元格中将标签文本设置为零。当没有可用数据时,将其设置为“”


    现在,底线永远不会被优化掉。剩余的空白表示有未设置的内容。

    I当单元格包含空标签(text==nil)时,单元格的布局过程会优化底线

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

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

    解决方法:

    切勿在单元格中将标签文本设置为零。当没有可用数据时,将其设置为“”


    现在,底线永远不会被优化掉。还有一个空格,表示有未设置的内容。

    能否显示您的
    单元格for rowatinexpath
    代码?以及您的
    高度for rowatinexpath
    。您是否考虑过将两个堆栈视图放置在垂直堆栈视图中,然后根据需要隐藏/取消隐藏较低的水平堆栈视图?您是否看到我下面的答案?隐藏/取消隐藏不是必需的。它是由一些苹果代码自动完成的。这就是问题的原因。
    dequeueReusableCellWithIdentifier:forIndexPath
    从不返回nil,因此它永远不会采用回退路径。您是否在
    setWorkout
    prepareforeuse
    中正确地重新配置了单元格?能否显示您的
    cellForRowAtIndexPath
    代码?以及您的
    rowatindexpath
    高度。您是否考虑过将两个堆栈视图放置在垂直堆栈视图中,然后根据需要隐藏/取消隐藏较低的水平堆栈视图?您是否看到我下面的答案?隐藏/取消隐藏不是必需的。它是由一些苹果代码自动完成的。这就是问题的原因。
    dequeueReusableCellWithIdentifier:forIndexPath
    从不返回nil,因此它永远不会采用回退路径。您是否在
    setWorkout
    prepareforeuse
    中正确重新配置单元格?