虽然不是重要的,但看到这些警告是非常烦人的:
Unable to simultaneously satisfy constraints. Probably at least one of the constraints in the following list is one you don't want. Try this: (1) look at each constraint and try to figure out which you don't expect; (2) find the code that added the unwanted constraint or constraints and fix it. (Note: If you're seeing NSAutoresizingMaskLayoutConstraints that you don't understand, refer to the documentation for the UIView property translatesAutoresizingMaskIntoConstraints) (
"<NSLayoutConstraint:0x19288a20 V:|-(6)-[UILabel:0x19288640] (Names: '|':_UITableViewHeaderFooterContentView:0x192885b0 )>",
"<NSLayoutConstraint:0x19288a70 V:[UILabel:0x19288640]-(6)-| (Names: '|':_UITableViewHeaderFooterContentView:0x192885b0 )>",
"<NSAutoresizingMaskLayoutConstraint:0x19289cd0 h=--& v=--& V:[_UITableViewHeaderFooterContentView:0x192885b0(0)]>" )
Will attempt to recover by breaking constraint <NSLayoutConstraint:0x19288a70 V:[UILabel:0x19288640]-(6)-| (Names: '|':_UITableViewHeaderFooterContentView:0x192885b0 )>
我的约束没有错。当视图最初为零大小时,UIKit尝试使用这些约束对UITableViewHeaderFooterView
进行布局时,会出现此问题。当然,任何积极的指标都无法满足任何限制。
一个明显的解决方法是为每个正面指标设置低于UILayoutPriorityRequired
优先级或使用NSLayoutRelationLessThanOrEqual
而不是NSLayoutRelationEqual
。但是我需要将这些拐杖添加到我对所有观点的所有约束中。更不用说我真正想要的是硬而快,而不是可选约束。
另一种解决方法是为UITableViewHeaderFooterView
设置初始框架。但是考虑到它的指定init方法是-initWithReuseIdentifier:
而不是-initWithFrame:
,UITableView
和UITableViewDelegate
有责任为UITableViewHeaderFooterView
指定框架,它既不会感觉良好解决方法。
那么更好的吗?
答案 0 :(得分:10)
我认为您的特定问题源于尝试在UITableViewHeaderFooterView
的实例上设置“容器”大小限制。问题类似于希望根据询问here的自动布局自己调整单元格大小。
具体来说,对于这个问题,视图的大小为零,但约束条件规定视图在维度上的至少 12pt(违反当前状态)。在这种情况下尤其违反了这一点,由于页眉/页脚视图使用框架/自动调整遮罩而不是自动布局来调整大小,因此无法处理,因此例外。
这种情况有两种选择:
layoutSubviews
是否为非零bounds.size
,或者(如果您尚未执行此操作)updateConstraints
子类的UITableViewHeaderFooterView
中安装约束(仅一次)。updateConstraints
不是self.bounds.size
(这将是正确的解决方案),您还可以合并上述两个解决方案并仅在CGSizeZero
中安装自动布局约束。