CollectionViewCell中隐藏的UIView支持autolayout

时间:2015-01-22 20:23:22

标签: uiview autolayout uicollectionviewcell uiview-hierarchy

我有一个UICollectionViewCell的自动布局限制。它按预期工作,但我的应用程序打印了很多关于未满足约束的警告:

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:0x7f9e650c50f0 UILabel:0x7f9e650c10c0'Toz     Kat Elek >30'.top == UIView:0x7f9e650c0fd0.topMargin - 8>",
    "<NSLayoutConstraint:0x7f9e650c51e0 UIView:0x7f9e650c17f0.top == UILabel:0x7f9e650c10c0'Toz     Kat Elek >30'.top + 20>",
    "<NSLayoutConstraint:0x7f9e650c5280 UIView:0x7f9e650c0fd0.bottomMargin == UIView:0x7f9e650c17f0.bottom - 8>",
    "<NSAutoresizingMaskLayoutConstraint:0x7f9e650d8550 h=--& v=--& V:[UIView:0x7f9e650c0fd0(0)]>"
)

Will attempt to recover by breaking constraint 
<NSLayoutConstraint:0x7f9e650c5280 UIView:0x7f9e650c0fd0.bottomMargin == UIView:0x7f9e650c17f0.bottom - 8>

Make a symbolic breakpoint at UIViewAlertForUnsatisfiableConstraints to catch this in the debugger.
The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKit/UIView.h> may also be helpful.

我尝试了很多不同的组合来找出问题的根源。在使用Debug View Hierarchy检查我的视图层次结构时,我发现有一个我没有添加的UIView,这个UIView会导致警告消息。 Hidden UIView

那么如何摆脱这些警告信息?

更新

这是我的视图层次结构:

hierarchy

view

4 个答案:

答案 0 :(得分:1)

好的,我在这里找到了答案:Auto layout constraints issue on iOS7 in UITableViewCell

问题在于细胞的隐藏内容视图。要在cellForItemAtIndexPath中返回单元格之前执行以下操作,请执行以下操作:

cell.contentView.frame = cell.bounds;
cell.contentView.autoresizingMask =
UIViewAutoresizingFlexibleLeftMargin |
UIViewAutoresizingFlexibleWidth |
UIViewAutoresizingFlexibleRightMargin |
UIViewAutoresizingFlexibleTopMargin |
UIViewAutoresizingFlexibleHeight |
UIViewAutoresizingFlexibleBottomMargin;

答案 1 :(得分:0)

我认为问题不在于隐藏的观点。 UICollectionViewCell有一个类似UITableViewCell的内容视图。约束冲突似乎约为UILabel

如果您可以截取故事板的截图,那就太好了。

答案 2 :(得分:0)

可以从错误中了解发生了什么:您的标签和其下的其他视图附加到mysteryView,顶部的标签8,然后20分隔其他视图,以及8从otherView的底部到mysteryView。非常标准。但是,autoresizingMask将mysteryView设置为零高度。由于它不能满足两者,它打破了将otherView保持在底部的约束。 MysteryView达到零高度(但显然停留在顶部位置)并且Label从那里开始等等,直到另一个View挂在底部没有任何东西。

由于mysteryView附加到您的UILabel和otherView,因此应该可以找到它和/或打破约束。找到获得文本的标签&#34; Toz Kat Elek&gt; 30&#34;并查看其尺寸检查器(右侧面板中的标尺图标)。找到通过-8附加到其顶部空间的约束。可能会有不止一个,这将成为问题的一部分。双击它,它将在IB窗口左侧的文档大纲中突出显示,约束详细信息将显示在检查器中。

如果您只能找到您希望附加到UILabel和其他元素的视图,请检查这些视图。您可能希望使用底部的按钮清除所有约束并重新开始。

但是,如果您发现了mysteryView并且它确实是一个偷渡者(显然高度为零),那么删除它。附加到标签和视图的约束正在起作用,因此您可能需要添加新的约束,将顶部和底部附加到真实的顶部和底部superview。

答案 3 :(得分:0)

您是否尝试删除UIView的底部边距约束?,因为您在警告上发布的内容已将其删除以从错误中恢复。如果您已经这样做了,您是否可以发布视图层次结构但是已打开约束?