【问题标题】:LayoutSubviews for Custom UITableViewCell and UIView自定义 UITableViewCell 和 UIView 的 LayoutSubviews
【发布时间】:2010-06-30 08:41:35
【问题描述】:

我有一个自定义UITableViewCell。它有一个UIView,它被添加到UITableViewCell 的“contentView”中。对于任何更新,我通过调用它的“setNeedsDisplay”并在 UIView 的“drawRect”方法中实现绘图来重绘 UIView

UITableViewCell 覆盖“willTransitionToState”并根据位掩码值要求 UIView 重绘。

因为我要求UIView 重新绘制自身,所以每次我“滑动删除”时,我都会看到单元格“闪烁”片刻;甚至由于删除按钮而没有移动位置的文本也会出现闪烁,因为所有内容都在重绘。

我知道一个可能的解决方案不是从“willTransitionToState”调用 UIView 的“setNeedsDisplay”,而是调用“setNeedsLayout” strong>”并让 UIView 实现“layoutSubviews”。

这就是我所困的地方:我如何重新布局我的UIView,因为我的UIView 中的所有内容都是“drawn”(我使用“drawInRect”和“drawAtPoint”字符串和图像的方法)。当“Delete”按钮出现时(就像在 iPhone 中的消息应用程序中一样),右侧还有一个字符串我想隐藏。

如何通过重新布局而不是重新绘制来做到这一点?

谢谢!!!

【问题讨论】:

    标签: iphone uiview uitableview


    【解决方案1】:

    我认为您的方法存在问题。与其绘制所有内容,不如在 init 方法或 NIB 中设置子视图。

    willTransitionToState 方法中,根据状态转换更新任何子视图。

    layoutSubviews 中,根据需要更新每个子视图的原点和大小。

    以下是willTransitionToState 文档中的一些详细信息。不过,我敢肯定你已经看过了:

    UITableViewCell 的子类可以实现此方法,以在单元格状态更改时对单元格的其他更改进行动画处理。每当单元格在状态之间转换时,UITableViewCell 都会调用此方法,例如从正常状态(默认)到编辑模式。自定义单元格可以设置和定位以新状态出现的任何新视图。然后单元格会收到一个 layoutSubviews 消息 (UIView),在该消息中它可以将这些新视图定位在新状态的最终位置。重写此方法时,子类必须始终调用 super。

    【讨论】:

      猜你喜欢
      • 2013-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多