UICollectionView 是否有最小尺寸或 iOS 9 beta 中的错误?
Is there a minimum size for UICollectionView or a bug in iOS 9 beta?
我有一个非常奇怪的自动布局问题,我以前从未 运行 遇到过。我不确定这是一个错误还是我在做一些愚蠢的事情。
首先是 Xcode 7 beta 5 和 运行ning 在 iOS 9 模拟器上。
理想的外观是在顶部显示一个工具栏,其中有几个按钮(其中一个仅在需要时出现)和一个填充屏幕其余部分的集合视图,如下所示:
我有限制使工具栏保持在顶部、左侧和右侧边缘,并接触其下方的集合视图。除了与上方工具栏的 0 点距离之外,集合视图与视图的底部、左侧和右侧边缘的连接为 0 点。
然而,我实际得到的是控制台中的两条通知,提示存在无法同时满足的约束。下面显示了被破坏的约束以及列出的所有约束,但它们是工具栏的高度以及工具栏和集合视图之间的 0 点间距。
通知列出了问题中涉及的所有约束,然后是它将打破以使事情正常进行的约束(它总是选择错误的……):
"<_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()
中具有适当的帧大小来获得第一张图像,但是一旦向下滚动集合视图,它就会脱离框架并占据整个屏幕。
如果我调试视图层次结构,工具栏实际上会显示在集合视图后面,因此它会被绘制。
这似乎是一个错误,解决方法是从所有视图中删除每个约束并在代码中创建适当的约束并将它们添加到主视图。这种交换必须在 viewDidAppear
发生,因为麻烦制造者不会在此之前出现。
我有一个非常奇怪的自动布局问题,我以前从未 运行 遇到过。我不确定这是一个错误还是我在做一些愚蠢的事情。
首先是 Xcode 7 beta 5 和 运行ning 在 iOS 9 模拟器上。
理想的外观是在顶部显示一个工具栏,其中有几个按钮(其中一个仅在需要时出现)和一个填充屏幕其余部分的集合视图,如下所示:
我有限制使工具栏保持在顶部、左侧和右侧边缘,并接触其下方的集合视图。除了与上方工具栏的 0 点距离之外,集合视图与视图的底部、左侧和右侧边缘的连接为 0 点。
然而,我实际得到的是控制台中的两条通知,提示存在无法同时满足的约束。下面显示了被破坏的约束以及列出的所有约束,但它们是工具栏的高度以及工具栏和集合视图之间的 0 点间距。
通知列出了问题中涉及的所有约束,然后是它将打破以使事情正常进行的约束(它总是选择错误的……):
"<_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()
中具有适当的帧大小来获得第一张图像,但是一旦向下滚动集合视图,它就会脱离框架并占据整个屏幕。
如果我调试视图层次结构,工具栏实际上会显示在集合视图后面,因此它会被绘制。
这似乎是一个错误,解决方法是从所有视图中删除每个约束并在代码中创建适当的约束并将它们添加到主视图。这种交换必须在 viewDidAppear
发生,因为麻烦制造者不会在此之前出现。