UICollectionView 自动布局约束正在打破
Posted
技术标签:
【中文标题】UICollectionView 自动布局约束正在打破【英文标题】:UICollection View Auto-layout Constraints Are Breaking 【发布时间】:2015-08-26 02:37:31 【问题描述】:我有一个带有 UICollectionView 的 ViewController。在情节提要中,我已经布置了单元格。
到我添加的单元格:
图像视图 图像视图嵌套在容器内 然后我在容器下面有一个标签然后我在情节提要中添加了自动布局约束:
当我运行模拟器时,这不起作用。我认为它不起作用,因为我使用的是自定义单元格。因此,我通过为所有约束设置 IBOutlets 并在 cellForItemAtIndexPath 方法中重置它们的值来修复它并使其正常运行:
//Layout cell
cell.img_Height.constant = 50
cell.img_Width.constant = 50
cell.leading_Img_to_Container.constant = 10
cell.trailing_Img_to_Container.constant = 10
cell.top_Img_to_Container.constant = 10
cell.bottom_Img_to_Container.constant = 10
cell.top_Container_to_Cell.constant = 10
cell.bottom_Container_to_Label.constant = 0
cell.horizontalCenter_Container_to_Cell.constant = 0
cell.bottom_Label_to_Cell.constant = 0 //Flexible constraint: In storyboard this relation is 'Greater than or equal to'
cell.horizontalCenter_Container_to_Label.constant = 0
当我运行应用程序时,集合视图看起来不错。但是,当我检查控制台时,它说它正在打破约束:
无法同时满足约束。 以下列表中的至少一个约束可能是您不想要的。试试这个:(1)查看每个约束并尝试找出您不期望的; (2) 找到添加了一个或多个不需要的约束的代码并修复它。 (注意:如果您看到不理解的 NSAutoresizingMaskLayoutConstraints,请参阅 UIView 属性 translatesAutoresizingMaskIntoConstraints 的文档) ( "", "", "", "", "", "= UILabel:0x7fc0026d2580'杂货清单'.bottom>", “” ) 将尝试通过打破约束来恢复 NSLayoutConstraint:0x7fc0026ba9d0 V:[UIImageView:0x7fc0026d2440(50)]>
我一直在调整约束并尝试调试它,但我无法弄清楚我做错了什么。如何正确设置布局?
【问题讨论】:
【参考方案1】:我能够通过消除我的图像所在的容器来解决我的问题,这简化了布局,因此也简化了所需的约束。
由于单元格是预先确定的大小,我的新方法只是将事物居中并确保它们的 y 位置相对于彼此是清晰的。
此时,我的约束:
使用大于 0 ( >=0 ) 来决定到单元格边缘的距离,并且优先级较低,因为无论如何都会发生这种效果,因为它们是居中的。 我的最高优先级约束确保单元格内的视图之间的空间量正确。【讨论】:
【参考方案2】:cell.img_Height.constant = 50
cell.img_Width.constant = 50
cell.leading_Img_to_Container.constant = 10
cell.trailing_Img_to_Container.constant = 10
cell.top_Img_to_Container.constant = 10
cell.bottom_Img_to_Container.constant = 10
您对 cell.img 添加了太多约束。 不需要top_Img_toContainer 和Bottom img_to_Container 约束。
有一个原则你需要知道。
您添加到情节提要的每个视图都必须有足够的约束(不多也不少)以确认它是:
宽度
身高
X 位置
Y 位置
【讨论】:
感谢您的建议,但只是注释掉了您指定的两行,控制台仍然给出相同的错误。以上是关于UICollectionView 自动布局约束正在打破的主要内容,如果未能解决你的问题,请参考以下文章
如何以编程方式在 UICollectionView 上添加自动布局?
从 UICollectionViewCell 到 ViewController 的自动布局约束