UITableViewAutomaticDimension打破约束?

时间:2014-11-29 16:34:24

标签: ios objective-c uitableview ios8 autolayout

我尝试使用UITableViewAutomaticDimension,但我无法让单元格达到全宽和正确的高度而不会导致NSLayoutAutomaticSizeConstraint...问题。如果我在单元格上关闭自动大小约束,则它不是全宽。

enter image description here

我有两个按钮,内容视图有水平和垂直约束。它们之间有一个垂直间距约束,每个按钮都有一个高度约束。

如果我关闭AutoResizingMask,我会得到一个不全宽的单元格。如果我将其保留,我会违反布局约束,但事情会正确呈现。

我怎样才能得到我正在寻找的行为?

translatesAutoresizingMaskIntoConstraints) 
(
    "<NSLayoutConstraint:0x7f856b169650 V:[UIButton:0x7f856b16a510'+(null)'(50)]>",
    "<NSLayoutConstraint:0x7f856b173dd0 UIButton:0x7f856b16a510'+(null)'.top == UITableViewCellContentView:0x7f856b16bfa0.topMargin>",
    "<NSLayoutConstraint:0x7f856b173e70 UITableViewCellContentView:0x7f856b16bfa0.bottomMargin == UITextField:0x7f856b16c4f0.bottom>",
    "<NSLayoutConstraint:0x7f856b174520 V:[UIButton:0x7f856b16a510'+(null)']-(8)-[UITextField:0x7f856b16c4f0]>",
    "<NSLayoutConstraint:0x7f856b182a10 'UIView-Encapsulated-Layout-Height' V:[UITableViewCellContentView:0x7f856b16bfa0(66)]>"
)

Will attempt to recover by breaking constraint 
<NSLayoutConstraint:0x7f856b169650 V:[UIButton:0x7f856b16a510'+(null)'(50)]>

实际上看起来宽度是由

设置的
- (CGSize)intrinsicContentSize {
    return CGSizeMake(320, 66);
}

如果我没有设定内在的内容大小,我就无法获得任何宽度或高度。

3 个答案:

答案 0 :(得分:2)

编辑: 它绝对是两个高度限制。尝试删除一个或降低优先级。

答案 1 :(得分:1)

AutoresizingMask on =允许此视图的父级设置适当的掩码。

AutoresizingMask off =不允许此视图的父级设置适当的掩码。我想自己做。

如果您在IB中创建视图,则默认情况下,其autoresizingMasks设置为No。

如果在代码中创建视图,则默认情况下将其autoresizingMasks设置为Yes。

当您关闭AutoresizingMask时,您获得一个非全宽度单元格(或实际上任何行为更改)的事实意味着单元格或表格的父级(在视图层次结构中)可能正在接管并设置约束(不是你想要的。)

现在我认为你得到这个非全宽度单元格的原因是因为当你在视图元素之间拖动以设置约束时IB中的一个恼人的默认值,而不是将约束绑定到顶部,底部等。 。 IB将其与边际联系起来(不同)。

因此,您需要从“文档大纲”中选择约束:

Document outline

然后逐个选择与边框绑定的约束:

Constraint closed

并确保未选中“相对于保证金”。

Constraint open

如果您使用IB右下角的摘要约束选项卡(左起第二个),则可以在创建约束时取消选择“约束到边距”:

Constraints summary

Constraints optn

答案 2 :(得分:1)

我遇到了类似的问题:

func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
    return UITableViewAutomaticDimension
}

它向我扔了一个关于&#34;无法满足约束的日志&#34;但是没有任何约束误导,所以我添加了estimatedHeightForRowAtIndexPath:

func tableView(tableView: UITableView, estimatedHeightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
    return UITableViewAutomaticDimension
}

它已修复