Dav*_*d E 109 xcode objective-c uitableview ios swift
在我运行包含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.
Run Code Online (Sandbox Code Playgroud)
之前,当我在这个项目上使用Xcode 5时,我会遇到一些错误,但是自从我升级后它们已经消失了.我现在没有其他错误或警告.我已经尝试调整所有tableview单元格的大小,并尝试使用标准高度,但我仍然得到相同的警告:
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.
Run Code Online (Sandbox Code Playgroud)
我也阅读了所有类似的主题,但他们的解决方案都没有帮助.当我使用模拟器测试应用程序时,应用程序运行正常,除了应该在tableView单元格中的图片不存在.
Woo*_*ter 202
您在iOS8的表格视图中遇到了一个梦幻般的新功能的副作用:自动行高度.
在iOS 7中,您要么拥有固定大小的行(设置为tableView.rowHeight),要么您编写代码来计算单元格的高度,然后将其返回tableView:heightForRowAtIndexPath.编写用于计算单元格高度的代码可能非常复杂,如果您的单元格中有许多视图,并且您在不同的字体大小上有不同的高度.添加动态类型,这个过程很麻烦.
在iOS 8中,您仍然可以执行上述操作,但现在可以通过iOS确定行的高度,前提是您已使用"自动布局"配置了单元格的内容.这对开发人员来说是一个巨大的好处,因为随着动态字体大小的变化,或者用户使用"辅助功能设置"修改文本大小,您的UI可以适应新的大小.这也意味着如果你有一个可以有多行文本的UILabel,你的单元格现在可以增长以适应单元格所需的那些,并且当它不需要时缩小,所以没有任何不必要的空格.
您看到的警告消息告诉您,单元格中没有足够的约束来自动布局通知tableview单元格的高度.
要使用动态单元格高度,以及其他海报已经提到的技术,也将消除此消息,您需要确保您的单元格有足够的约束将UI项目绑定到单元格的顶部和底部.如果您以前使用过自动布局,则可能习惯于设置Top + Leading约束,但动态行高也需要底部约束.
布局传递的工作方式如下,这是在一个单元格在屏幕上显示之前,以及时的方式发生的:
计算具有固有尺寸的内容的尺寸.这包括UILabels和UIImageViews,它们的尺寸分别基于它们包含的文本或UIImages.这两个视图都会认为它们的宽度是已知的(因为您为尾随/前沿设置了约束,或者您设置了显式宽度,或者您使用了最终从一侧到另一侧显示宽度的水平约束).假设一个标签有一段文字("行数"设置为0,所以它将自动换行),它只能是310点,所以它确定在当前字体大小为120pt高.
UI根据您的定位约束进行布局.标签底部有一个连接到单元格底部边距的约束.由于标签已经增长到120点高,并且由于它通过约束被绑定到单元格的底部,因此必须将单元"向下"(增加单元的高度)以满足"底部"的约束.标签始终与细胞底部的标准距离.
如果缺少底部约束,则会报告您报告的错误消息,在这种情况下,没有任何东西可以"推动"单元格的底部远离单元格的顶部,这是报告的模糊性:没有任何东西可以推动底部顶部,细胞坍塌.但是,自动布局也会检测到这一点,并且会回退到使用标准行高.
对于它的价值,并且主要是为了得到一个全面的答案,如果你实现iOS 8的基于Auto Layout的动态行高,你应该实现tableView:estimatedHeightForRowAtIndexPath:.该估计方法可以使用单元格的粗略值,并且在最初加载表视图时将调用它.它帮助UIKit绘制滚动条之类的东西,除非tableview知道它可以滚动多少内容,但不需要绘制,但不需要完全准确的大小,因为它只是一个滚动条.这使得实际行高的计算可以延迟到需要单元格的时刻,这样计算量更小,并且可以更快地呈现UITableView.
Vik*_*era 114
到目前为止,有三件事已经成功地使这一警告沉默 你可以找到最方便的.没什么好看的.
在viewDidLoad中设置默认单元格的高度
self.tableView.rowHeight = 44;
Run Code Online (Sandbox Code Playgroud)转到故事板并将tableview上的行高更改为不同于44的行.
实现tableview的委托方法heightForRowAtIndexPath
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
return 44;
}
Run Code Online (Sandbox Code Playgroud)奇怪的.
tableView.estimatedRowHeight = 85.0
tableView.rowHeight = UITableViewAutomaticDimension
Run Code Online (Sandbox Code Playgroud)
并确保您在UITableViewCellas- 的所有方面都添加了约束-
我今天收到这个警告。这就是它对我来说消失的原因(在界面生成器中)
1. 将表视图的行高字段设置为 44 以外的值 2 将 tableView 单元格的行高字段设置为 44 以外的值
我不必对代码进行任何更改
| 归档时间: |
|
| 查看次数: |
58260 次 |
| 最近记录: |