【发布时间】:2014-02-01 11:09:17
【问题描述】:
我已经设置了一个 UICollectionView,一切正常(选择、标题等),但是,我想在某些情况下更改滚动方向。
简而言之,如果我进入故事板并更改滚动方向,它可以正常工作,但我想以编程方式进行!
我曾尝试使用类似的方式直接更改集合视图的滚动方向
[myCollectionView setScrollDirection:....and so on.......
但这不起作用,我在那里找不到 scrollDirection 或类似的东西。
我也尝试设置流布局,但我确定我做错了(即尝试将 ViewLayout 设置为 FlowLayout)。
UICollectionViewFlowLayout *flowLayout = [[UICollectionViewFlowLayout alloc]init];
[flowLayout setScrollDirection:UICollectionViewScrollDirectionVertical];
[myCollectionView setCollectionViewLayout:flowLayout];
这会因很多约束问题而崩溃,我怀疑我需要对 flowLayout 做更多的工作(据我发现它现在比我高一点)。
还应注意,我使用的是自定义单元格、页眉和页脚。
简而言之,有没有简单的方法可以做到这一点?或者有谁知道一个好的流布局教程?
编辑
我这样设置集合视图;
[myCollectionView setDataSource:self];
[myCollectionView setDelegate:self];
我实现了这些委托方法并且一切正常
viewForSupplementaryElementOfKind
numberOfSectionsInCollectionView
numberOfItemsInSection
cellForItemAtIndexPath
didSelectItemAtIndexPath
我已将 DataSource 和 Delegate 添加到 .h 以及 FlowLayout 委托,但我不确定我还应该为后者添加什么。
大部分视觉布局都是在 Story Board 中完成的,我以编程方式完成了一些事情,例如字体、大小和颜色。
另一个编辑
这是我尝试更改 FlowLayout 时的错误,当我尝试使布局无效时也会出现此错误。
无法同时满足约束。 以下列表中的至少一个约束可能是您不想要的。试试这个:(1)查看每个约束并尝试找出您不期望的; (2) 找到添加了一个或多个不需要的约束的代码并修复它。 (注意:如果您看到不理解的 NSAutoresizingMaskLayoutConstraints,请参阅 UIView 属性 translatesAutoresizingMaskIntoConstraints 的文档)
"<NSAutoresizingMaskLayoutConstraint:0x89967f0 h=--& v=--& V:[menuCell:0x8991700(50)]>",
"<NSLayoutConstraint:0x8991200 menuCell:0x8991700.bottom == UILabel:0x8992be0.bottom + 100>",
"<NSLayoutConstraint:0x898fd50 UILabel:0x8992be0.top == menuCell:0x8991700.top + 3>"
将尝试通过打破约束来恢复
中断 objc_exception_throw 以在调试器中捕获它。 中列出的 UIView 上的 UIConstraintBasedLayoutDebugging 类别中的方法也可能会有所帮助。
【问题讨论】:
-
集合视图所在的视图是否符合 UICollectionViewFlowLayoutDelegate 协议?您确定您尝试绘制的内容量足够大以保证集合视图实际滚动吗?我们可以看到更多集合视图的设置吗?通过尝试在 Flow Layout 上设置滚动方向,您正朝着正确的方向前进,所以好的开始!
-
@MatthewHallatt 我添加了更多信息。这是一张大桌子,4 或 5 个部分可能有 50-60 个项目。集合视图是底部的一个长条,水平滚动,可以单击按钮,使集合扩展到几乎大部分屏幕(正在工作),但我希望滚动移动到垂直滚动。
标签: ios xcode cocoa-touch uicollectionview flowlayout