请向我解释以下自动布局行为

时间:2014-09-21 10:43:56

标签: ios uitableview autolayout ios8

我目前正在尝试通过以下基于约束的UITableViewCell布局(iOS 8)来弄清楚我做错了什么。

我的单元布局如下图所示:

enter image description here

左侧有一个图像视图,右侧有一个标签,两者都应该触及到处的细胞边缘。图像具有固定大小(64x64),标签的高度始终小于该值。我希望图像的高度使单元格将高度扩展到正确的值(图像高度+ 2 *边距)。

问题在于:我对垂直尺寸有三个约束,V[Image(64)]Reset.bottom == UITableViewCellContentView.bottomMarginReset.top == UITableViewCellContentView.topMargin(都是通过故事板定义的)。当我显示单元格时,我得到一个不可满足的约束错误。 UIView-Encapsulated-Layout-Height约束会干扰我的约束,并且自动布局会破坏我的图像视图高度约束。一切看起来都应该如此,但我不喜欢运行时的错误。

如果我给我的身高约束优先999,一切看起来都很好,没有错误。

所以我的理解是,在运行时两种情况下都会打破我的身高限制。

但是当我完全删除高度约束时,图像将以其原始高度显示(文件的分辨率与我在单元格中显示的分辨率不同)。为什么会这样,或者我在这里出错了什么?

编辑/更新:我刚注意到我对所有工作都错了。我的单元格的初始显示很好,但是当单元格改变时(在我的情况下,我移动另一个,简单的单行标签,它下面的单元格)我的单元格将其高度更改为默认行高(44点),压缩图像进行中。在两种情况下都会发生这种情况,当自动布局破坏了我的约束或者我将高度的优先级降低到999时。我真的不知道如何让这些单元格做我想做的事。

2 个答案:

答案 0 :(得分:0)

您应该尝试在代码中设置estimatedRowHeight属性,并且根据您使用的iOS 6版本,将rowHeight属性设置为UITableViewAutomaticDimension,< / p>

self.tableView.estimatedRowHeight = 44;
self.tableView.rowHeight = UITableViewAutomaticDimension;

nib或storyboard表视图的默认rowHeight应该在某个时候更改为UITableViewAutomaticDimension;我不知道它是否已经在6.0.1中,所以最后一行可能是必要的。

答案 1 :(得分:0)

您是否支持旧版iOS?如果是这种情况,请务必取消选中抱歉约束的Relative to margin选项。

enter image description here