【问题标题】:Odd enum memory issue in layoutSubviewslayoutSubviews 中的奇数枚举内存问题
【发布时间】:2015-07-09 18:15:37
【问题描述】:

在uitableviewcell的layoutSubviews中,有类似

的逻辑
switch(enum_instance){ }

enum_instance 从某个地方改变,例如在一个计时器中,然后 setNeedLayout 触发 layoutSubviews

但是 layoutSubviews 中的 enum_instance 不会更新。这是错误吗?还是我做错了什么?

谢谢,

【问题讨论】:

  • setNeedLayout 只会为新周期安排重绘。调用layoutIfNeeded 将立即布置子视图。
  • 实际上我正在使用 layoutIfNeeded :) 局部变量有时会被意外更新,这很奇怪

标签: ios uitableview memory-management layoutsubviews


【解决方案1】:

这是因为UITableViewCells 被回收。当调用dequeueReusableCellWithIdentifier: 时,滚动tableView 将随机播放单元格。这意味着layoutIfNeeded 可能会在错误的单元格上调用(滚动后,该单元格可能会分配给另一个indexPath)。只有在tableView:cellForRowAtIndexPath: 中才能设置单元属性的安全位置应该配置单元。

更简单的方法是重新计算tableView:heightForRowAtIndexPath:tableView:cellForRowAtIndexPath: 中的单元格。可以通过调用 reloadRowsAtIndexPaths:withRowAnimation: 为要重绘的单元格提供 indexPaths 数组来重新触发此方法。

【讨论】:

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