当我运行包含 tableview 单元格的应用程序时更新到 Xcode 6.1 beta 2 后,调试助手说:
Warning once only: Detected a case where constraints ambiguously suggest a height of zero for a tableview cell's content view. We're considering the collapse unintentional and using standard height instead.
Warning once only: Detected a case where constraints ambiguously suggest a height of zero for a tableview cell's content view. We're considering the collapse unintentional and using standard height instead.
最佳答案
您会遇到 iOS8 的 Tableviews 中一个奇妙的新功能的副作用:自动行高。
在 iOS 7 中,您要么拥有固定大小的行(使用 tableView.rowHeight
设置),要么编写代码来计算单元格的高度,然后在 tableView:heightForRowAtIndexPath
中返回它。 .如果单元格中有许多 View 并且在不同的字体大小下需要考虑不同的高度,则编写用于计算单元格高度的代码可能会非常复杂。添加动态类型,这个过程很痛苦。
在 iOS 8 中,您仍然可以执行上述操作,但现在行的高度可以由 iOS 确定,前提是您已经使用自动布局配置了单元格的内容。这对开发人员来说是巨大的好处,因为随着动态字体大小的变化,或者用户使用辅助功能设置修改文本大小,您的 UI 可以适应新的大小。这也意味着如果您有一个可以包含多行文本的 UILabel,您的单元格现在可以在单元格需要时增长以适应这些单元格,并在不需要时缩小,因此没有任何不必要的空白。
您看到的警告消息是告诉您单元格中没有足够的约束用于自动布局来通知表格 View 单元格的高度。
要使用动态单元格高度,连同其他海报已经提到的技术,也将消除此消息,您需要确保您的单元格具有足够的约束来将 UI 项绑定(bind)到单元格的顶部和底部。如果您之前使用过 Auto Layout,您可能习惯于设置 Top + Leading 约束,但动态行高也需要底部约束。
布局过程是这样工作的,它发生在单元格显示在屏幕上之前,以即时的方式:
tableView:estimatedHeightForRowAtIndexPath:
.该估计方法可以为您的单元格使用粗略的值,并且会在最初加载表格 View 时调用。它帮助 UIKit 绘制滚动条之类的东西,除非 tableview 知道它可以滚动多少内容,否则无法绘制滚动条,但不需要完全准确的尺寸,因为它只是一个滚动条。这使得实际行高的计算被推迟到需要单元格的那一刻,这减少了计算密集度,并且让您的 UITableView 呈现得更快。
https://stackoverflow.com/questions/25902288/