是否存在UICollectionView的最小大小或iOS 9 beta中的错误?

时间:2015-08-08 23:52:39

标签: xcode autolayout uicollectionview ios9

我有一个非常奇怪的自动布局问题,我以前从未遇到过这个问题。我不确定这是一个错误还是我在做一些愚蠢的事情。 首先,这是使用Xcode 7 beta 5并在iOS 9模拟器上运行。 所需的外观是工具栏显示在顶部,其中有几个按钮(其中一个仅在需要时出现)和一个填充屏幕其余部分的集合视图,如下所示: enter image description here

我有限制使工具栏保持顶部,左侧和右侧边缘以及触摸它下面的集合视图。集合视图除了距离工具栏上方的0点距离外,还有0点连接到视图的底部,左侧和右侧边缘。

然而,实际上我得到的是控制台中的两个注意事项,即存在无法同时满足的约束。下面显示了被破坏的约束以及列出的所有约束,但它们是工具栏的高度以及工具栏和集合视图之间的0点间距。 enter image description here

通知列出了问题中涉及的所有约束,然后是约束,它会破坏使事情有效(它总是选错了......):

    "<_UILayoutSupportConstraint:0x7fbaf9fd0e20 V:[_UILayoutGuide:0x7fbaf9fd9b40(20)]>",
    "<_UILayoutSupportConstraint:0x7fbaf9fc94c0 V:|-(0)-[_UILayoutGuide:0x7fbaf9fd9b40]   (Names: '|':UIView:0x7fbaf9fd9450 )>",
    "<NSLayoutConstraint:0x7fbaf9d3f8d0 'toolbarHeight' V:[UIToolbar:0x7fbaf9d3f6f0(44)]>",
    "<NSLayoutConstraint:0x7fbaf9fda8a0 'toolbarToCollectionView' V:[UIToolbar:0x7fbaf9d3f6f0]-(0)-[UICollectionView:0x7fbafa84c000]>",
    "<NSLayoutConstraint:0x7fbaf9fa67e0 'toolbarTop' V:[_UILayoutGuide:0x7fbaf9fd9b40]-(0)-[UIToolbar:0x7fbaf9d3f6f0]>",
    "<NSAutoresizingMaskLayoutConstraint:0x7fbaf9d4ac90 h=-&- v=-&- 'UIView-Encapsulated-Layout-Top' V:|-(0)-[UIView:0x7fbaf9fd9450]   (Names: '|':UITransitionView:0x7fbaf9fd91d0 )>"


Will attempt to recover by breaking constraint 

<NSLayoutConstraint:0x7fbaf9d3f8d0 'toolbarHeight' V:[UIToolbar:0x7fbaf9d3f6f0(44)]>


    "<_UILayoutSupportConstraint:0x7fbaf9fd0e20 V:[_UILayoutGuide:0x7fbaf9fd9b40(20)]>",
    "<_UILayoutSupportConstraint:0x7fbaf9fc94c0 V:|-(0)-[_UILayoutGuide:0x7fbaf9fd9b40]   (Names: '|':UIView:0x7fbaf9fd9450 )>",
    "<NSLayoutConstraint:0x7fbaf9fda8a0 'toolbarToCollectionView' V:[UIToolbar:0x7fbaf9d3f6f0]-(0)-[UICollectionView:0x7fbafa84c000]>",
    "<NSLayoutConstraint:0x7fbaf9fa67e0 'toolbarTop' V:[_UILayoutGuide:0x7fbaf9fd9b40]-(0)-[UIToolbar:0x7fbaf9d3f6f0]>",
    "<NSAutoresizingMaskLayoutConstraint:0x7fbaf9d4ac90 h=-&- v=-&- 'UIView-Encapsulated-Layout-Top' V:|-(0)-[UIView:0x7fbaf9fd9450]   (Names: '|':UITransitionView:0x7fbaf9fd91d0 )>"

Will attempt to recover by breaking constraint 
<NSLayoutConstraint:0x7fbaf9fda8a0 'toolbarToCollectionView' V:[UIToolbar:0x7fbaf9d3f6f0]-(0)-[UICollectionView:0x7fbafa84c000]>

鉴于两组约束列表NSAutoresizingMaskLayoutConstraint我添加了以下代码来尝试和阻止添加额外约束,它没有效果......

collectionView.translatesAutoresizingMaskIntoConstraints = false
toolbar.translatesAutoresizingMaskIntoConstraints = false

如果我将视图本身设置为不将自动调整掩码转换为约束,并且所有显示的内容都是黑色(但集合视图确实已创建,但已隐藏在某处)。

问题似乎是NSAutoresizingMaskLayoutConstraint,但我无法弄清楚如何让它消失。

这一切都来自测试版中的错误吗?是否有一些奇怪的最小集合视图大小(似乎集合视图是一个屏幕猪)?或者我错过了什么(可能是非常明显的东西)?

我通过强制集合视图在viewDidAppear()中具有正确的帧大小来获得第一个图像,但是一旦集合视图向下滚动,它就会从框架中移开并占据整个屏幕。

如果我调试视图层次结构,工具栏实际上会显示在集合视图后面,以便它被绘制。

1 个答案:

答案 0 :(得分:0)

看起来这是一个错误,解决方法是从所有视图中删除每个约束,并在代码中创建适当的约束并将它们添加到主视图中。这种交换必须在viewDidAppear中进行,因为麻烦制造者在此之前没有出现过。