【问题标题】:Assertion failure in -[UITableView layoutSublayersOfLayer:]-[UITableView layoutSublayersOfLayer:] 中的断言失败
【发布时间】:2014-05-26 01:34:30
【问题描述】:

我想在UIViewController 上使用UISearchDisplayController,其中包括UITableView
我使用自动布局。当我尝试将 SearchBar (_searchBar) 放在 tableHeaderView 中时

self.tableView.tableHeaderView = _searchBar;

我得到了错误 'NSInternalInconsistencyException', 原因:'执行 -layoutSubviews 后仍需要自动布局。 UITableView的-layoutSubviews的实现需要调用super。'

禁用自动布局,错误消失,但我需要自动布局...

当我使用自定义单元或标准单元时出现错误...

当 TableView 没有行时出现错误...

【问题讨论】:

    标签: objective-c uiviewcontroller xcode5 uisearchbar ios7.1


    【解决方案1】:

    作为这个问题的一般解决方案,或者至少是找到它的原因的一种方法:

    • 开启异常断点
    • 子类UITableView并覆盖layoutSublayersOfLayer:,只调用super
    • 运行您的应用 - 您将停止使用新方法
    • 在调试器中,键入po [self _autolayoutTrace]

    这将显示窗口中每个视图的打印输出,其中自动布局无法提出解决方案的视图以星号或AMBIGUOUS LAYOUT 突出显示。这些是您需要调查其约束的视图。

    【讨论】:

    【解决方案2】:

    向 UITableView 添加子视图时,对子视图有一些特定要求。考虑将子视图添加到控制器中的另一个视图(超级视图)而不是 UITableView。

    "Auto Layout still required after executing -layoutSubviews" with UITableViewCell subclass

    【讨论】:

    • 正如@Vladimir 在他的回答中指出的那样,在 tableView 中自动布局视图可能会触发该错误(在表本身中,甚至自动布局 tableViewHeader/Footer)。澄清一下,我发现这个错误可能不会出现在 iOS 8 中的某些布局中,但肯定会出现在 iOS 7 中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-13
    • 2013-02-25
    相关资源
    最近更新 更多