无法在 XCode 6 iOS 8 中获得动态 table 单元格大小
Unable to get dynamic table cell size working in XCode 6 iOS 8
我正在尝试在新应用中采用自适应布局,并且学到了很多东西。对于最后一部分,我不得不将文本转储到 table 并调整单元格以保持适应性,这似乎很容易。
我通读了一些教程,对于 iOS 8 看来它只归结为两件事:
- 设置了 estimatedRowHeight 和 rowHeight = UITableViewAutomaticDimension
- 设置约束以对单元格本身产生压力
可耻的是,我一整天都在 window 试图掌握这两点......我下载了 Keith Harrison 在 self sizing table view cells 上提供的代码以查看其工作情况。我将他的单元格复制到我更大的项目中并且它起作用了,但是我自己的单元格中的 none 起作用了。我解构了他项目中的所有内容,并将其最小化到只剩下一点点,然后尝试从头开始制作一个类似的单元格。我已经检查并验证了每个约束、每个 hugging/resistance 设置等,但我的无法扩展单元格高度。
如果有人能指出我做错了什么(而且它一定很小,因为我看到的一切都是一样的)我已经上传了他的示例的最小化版本 here (GitHub)。
在这个例子中,我尝试了一个带有单个多行标签的单元格,周围都有约束以及一个尽可能靠近他的单元格的单元格。我发现在我的许多尝试中,一切看起来都一样,但是我会遇到 UIView-Encapsulated-Layout-Height
约束问题。在上次尝试中,我将内容容器的垂直间距的优先级从 1000 降低到 999。
我已经检查或尝试过但没有效果的事情:
- 约束是对超级视图(内容容器,而不是单元格)
- 标签设置为 0 行
- 拥抱和抵抗优先级与工作细胞相同
- 加载后table重新加载
我的解决方案在又一次长时间尝试后现在可以工作了。两件事:
- UITableViewCells 虽然在情节提要中的各个方面都相同,但在情节提要源代码中有一个
rect
标记,具有已定义的宽度和高度。我到处寻找 IB 中的值,但没有运气。删除它解决了我发布的 GitHub 测试项目的问题。
- 转移到我最初处理的项目后,单元格仍然没有调整大小,但是当方向改变时会。我必须添加一个
cellForRowAtIndexPath
方法来在被请求的单元格上调用 setNeedsDisplay
和 layoutIfNeeded
。
按照上面的步骤,一切似乎都在工作。
我正在尝试在新应用中采用自适应布局,并且学到了很多东西。对于最后一部分,我不得不将文本转储到 table 并调整单元格以保持适应性,这似乎很容易。
我通读了一些教程,对于 iOS 8 看来它只归结为两件事:
- 设置了 estimatedRowHeight 和 rowHeight = UITableViewAutomaticDimension
- 设置约束以对单元格本身产生压力
可耻的是,我一整天都在 window 试图掌握这两点......我下载了 Keith Harrison 在 self sizing table view cells 上提供的代码以查看其工作情况。我将他的单元格复制到我更大的项目中并且它起作用了,但是我自己的单元格中的 none 起作用了。我解构了他项目中的所有内容,并将其最小化到只剩下一点点,然后尝试从头开始制作一个类似的单元格。我已经检查并验证了每个约束、每个 hugging/resistance 设置等,但我的无法扩展单元格高度。
如果有人能指出我做错了什么(而且它一定很小,因为我看到的一切都是一样的)我已经上传了他的示例的最小化版本 here (GitHub)。
在这个例子中,我尝试了一个带有单个多行标签的单元格,周围都有约束以及一个尽可能靠近他的单元格的单元格。我发现在我的许多尝试中,一切看起来都一样,但是我会遇到 UIView-Encapsulated-Layout-Height
约束问题。在上次尝试中,我将内容容器的垂直间距的优先级从 1000 降低到 999。
我已经检查或尝试过但没有效果的事情:
- 约束是对超级视图(内容容器,而不是单元格)
- 标签设置为 0 行
- 拥抱和抵抗优先级与工作细胞相同
- 加载后table重新加载
我的解决方案在又一次长时间尝试后现在可以工作了。两件事:
- UITableViewCells 虽然在情节提要中的各个方面都相同,但在情节提要源代码中有一个
rect
标记,具有已定义的宽度和高度。我到处寻找 IB 中的值,但没有运气。删除它解决了我发布的 GitHub 测试项目的问题。 - 转移到我最初处理的项目后,单元格仍然没有调整大小,但是当方向改变时会。我必须添加一个
cellForRowAtIndexPath
方法来在被请求的单元格上调用setNeedsDisplay
和layoutIfNeeded
。
按照上面的步骤,一切似乎都在工作。