代码之家  ›  专栏  ›  技术社区  ›  Steveo

iOS 8 GM上无限循环中的layoutSubviews

  •  4
  • Steveo  · 技术社区  · 11 年前

    我的应用程序将 UITableViewCell 和机具 layoutSubviews 修改单元格的 contentView 的宽度,如下所示:

    - (void)layoutSubviews {
        [super layoutSubviews];
        // position subviews...
        CGRect frame = [[self contentView] frame];
        frame.size.width -= 20;
        [[self contentView] setFrame:frame]; 
    }
    

    当使用iOS 8模拟器和Xcode 6 GM种子运行此代码时, 这会触发无限循环 然而,当在运行iOS 8 GM种子的真实iPhone或iPad上运行时,它不会像以前版本的iOS那样循环。

    我最初认为差异在于编译器优化,但模拟器在调试配置和发布配置中都有循环。

    问题

    • 为什么iOS 8 GM和模拟器之间存在差异?
    • 这是一个关键的bug修复程序吗?我非常不愿意发布一个显示出潜在严重挂起bug的应用程序,即使我无法在设备上复制它。
    • 在您看来,在iOS 7和6上进行重构以消除循环而不导致回归的最佳方法是什么?
    1 回复  |  直到 11 年前
        1
  •  4
  •   Michał Ciuba Chandru    11 年前

    这发生在我之前的iOS 8测试版上。发生在设备和模拟器上。经过一些调试,我发现 UITableViewCell 可能在iOS8内部使用自动布局。此外 contentView.frame 触发的,触发的 layoutSubviews (这可能也是无限循环的原因)。

    作为解决方法,我向单元格的 contentView 并修改了其 frame 相反然后我使用这个视图,就像使用 内容视图 (作为所有自定义单元格元素的超级视图)。

    推荐文章