UICollection视图自动布局约束正在中断

时间:2015-08-26 02:37:31

标签: ios swift autolayout uicollectionview uicollectionviewlayout

我有一个带有UICollectionView的ViewController。在故事板中,我已经布置了单元格。

Screen shot of layout

我添加的单元格:

  • 图片视图
  • 图像视图嵌套在容器
  • 然后我在容器下面有一个标签

然后我在故事板中添加了自动布局约束:

Screen shot of my constraints

当我运行模拟器时,这不起作用。我认为它没有用,因为我使用的是自定义单元格。所以我通过为所有约束设置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'Grocery List'.bottom>”,       “”   )   将尝试通过打破约束来恢复   NSLayoutConstraint:0x7fc0026ba9d0 V:[UIImageView:0x7fc0026d2440(50)]>

我一直在调整约束并尝试调试这个,但我无法弄清楚我做错了什么。如何正确设置布局?

2 个答案:

答案 0 :(得分:1)

我能够通过消除我的图像容器来解决我的问题,这简化了布局,因此也简化了所需的约束。

由于单元格是预定的大小,我的新方法只是将事物放在中心位置,并确保它们的y位置相互清晰。

此时,我的约束:

  • 使用大于0(> = 0)来指定到单元格边缘的距离并且具有低优先级,因为它们无论如何都应该发生,因为它们居中。
  • 我的最高优先级约束确保单元格中的视图之间存在正确的空间量。

答案 1 :(得分:0)

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 Constrain是不必要的。

您需要了解原则。

您添加到故事板的每个视图都必须有足够的约束(既不多也不少)来确认:

宽度

高度

X位置

Y位置