请向我解释以下自动布局行为
Posted
技术标签:
【中文标题】请向我解释以下自动布局行为【英文标题】:Please explain the following auto layout behavior to me 【发布时间】:2014-09-21 10:43:56 【问题描述】:我目前正试图找出我在使用以下基于约束的 UITableViewCell 布局 (ios 8) 时做错了什么。
我的单元格的布局如下图所示:
左边有一个图像视图,右边有一个标签,两者都应该接触到单元格边缘。图像具有固定尺寸(64x64),标签的高度总是小于那个。我希望图像的高度使单元格将高度扩展到正确的值(图像高度 + 2 * 边距)。
问题是这样的:我对垂直尺寸有三个约束,V[Image(64)]
、Reset.bottom == UITableViewCellContentView.bottomMargin
和 Reset.top == UITableViewCellContentView.topMargin
(均通过情节提要定义)。当我显示单元格时,我得到一个不可满足的约束错误。 UIView-Encapsulated-Layout-Height
约束干扰了我的约束,并且自动布局打破了我的图像视图高度约束。一切看起来都应该如此,但我不喜欢运行时出现错误。
如果我给我的高度限制优先级 999,一切看起来都很好,没有错误。
所以我的理解是,我的高度限制在运行时在这两种情况下都会被打破。
但是当我完全删除高度约束时,图像会显示在其原始高度(文件的分辨率与我在单元格中显示的分辨率不同)。为什么会这样,或者我在这里做错了什么?
编辑/更新:我刚刚注意到我对一切正常工作都错了。我的单元格的初始显示很好,但是当单元格发生变化时(在我的情况下,我正在移动另一个简单的单行标签,它下面的单元格)我的单元格将其高度更改为默认行高(44 pts),挤压图像进行中。这两种情况都会发生,当自动布局打破我的约束或当我将高度的优先级降低到 999 时。我真的不知道如何让这些单元格做我想做的事。
【问题讨论】:
他们是否在 iOS 8 中做了一些新的事情,您现在可以从单元格本身调整表格视图单元格的大小? 是的,动态单元格高度有些问题。这是我认为的一切自动布局计划的一部分。基本上,tableView:heightForCellAtIndexPath
应该不再需要了。
如果是这样,它需要比在 iOS 7 中快几倍。我在单元格中使用了自动布局(即使 tableView:heightForCellAtIndexPath
返回相同的值),而且速度非常慢。
【参考方案1】:
您应该尝试在代码中设置estimatedRowHeight
属性,并且根据您使用的iOS 6 版本,将rowHeight
属性设置为UITableViewAutomaticDimension
,
self.tableView.estimatedRowHeight = 44;
self.tableView.rowHeight = UITableViewAutomaticDimension;
nib 或 storyboard 表格视图的默认 rowHeight 应该在某个时候更改为 UITableViewAutomaticDimension;我不知道它是否在 6.0.1 中,所以最后一行可能是必要的,也可能不是。
【讨论】:
对不起,我想我应该提到我已经尝试了这两行(在 viewDidLoad 中),但无济于事。另外,如果有任何改变,我将使用 Xcode 6.1 Beta。【参考方案2】:您是否支持旧版本的 iOS?如果是这种情况,请务必取消选中正在抱怨的约束的 Relative to margin
选项。
【讨论】:
我决定学习新的做事方式,同时保持对我知之甚少的东西的向后兼容性对我来说太过分了,所以我只支持 iOS 8。一项属于超级视图的所有约束都相对于边距。以上是关于请向我解释以下自动布局行为的主要内容,如果未能解决你的问题,请参考以下文章