Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xcode/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 更改UICollectionView中的滚动方向_Ios_Xcode_Cocoa Touch_Uicollectionview_Flowlayout - Fatal编程技术网

Ios 更改UICollectionView中的滚动方向

Ios 更改UICollectionView中的滚动方向,ios,xcode,cocoa-touch,uicollectionview,flowlayout,Ios,Xcode,Cocoa Touch,Uicollectionview,Flowlayout,我有一个UICollectionView,我已经设置好了,一切正常(选择、标题等),但是,我想在某些情况下更改滚动方向 简言之,如果我进入故事板,改变滚动方向,它工作得很好,但我想做它的编程 我尝试过直接用类似的方法更改集合视图的滚动方向 [myCollectionView setScrollDirection:....and so on....... 但这不起作用,我在那里找不到滚动方向或类似方向 我也尝试过设置流程布局,但我确信我做得不对(即尝试将ViewLayout设置为Flow

我有一个UICollectionView,我已经设置好了,一切正常(选择、标题等),但是,我想在某些情况下更改滚动方向

简言之,如果我进入故事板,改变滚动方向,它工作得很好,但我想做它的编程

我尝试过直接用类似的方法更改集合视图的滚动方向

    [myCollectionView setScrollDirection:....and so on.......
但这不起作用,我在那里找不到滚动方向或类似方向

我也尝试过设置流程布局,但我确信我做得不对(即尝试将ViewLayout设置为FlowLayout)

这会导致很多约束问题,我怀疑我需要对flowLayout做更多的工作(从我现在发现的情况来看,flowLayout有点凌驾于我之上)

还应注意,我使用的是自定义单元格、页眉和页脚

简言之,有没有一个简单的方法可以做到这一点?或者有人知道一个好的流程布局教程吗

编辑

我将集合视图设置为这样

[myCollectionView setDataSource:self];
[myCollectionView setDelegate:self];
我实现了这些委托方法,所有的工作都很好

viewForSupplementaryElementOfKind
numberOfSectionsInCollectionView
numberOfItemsInSection
cellForItemAtIndexPath
didSelectItemAtIndexPath
我已经将DataSource和委托添加到了.h中,还添加了FlowLayout委托,但我不确定对于后者我还应该添加什么

大部分的视觉布局是在故事板上完成的,还有一些事情,比如字体、大小和颜色,我是通过编程来完成的

另一次编辑

这是当我尝试更改FlowLayout时出现的错误,当我尝试使布局无效时也会出现这种错误

无法同时满足约束。 可能下面列表中至少有一个约束是您不想要的。试着这样做:(1)看看每个约束,试着找出你不期望的约束;(2) 找到添加了不需要的约束的代码,然后修复它。(注意:如果您看到不理解的NSAutoresizingMaskLayoutConstraints,请参阅UIView属性TranslatesAutoResizingMaskToConstraints的文档)

“”,
"",
""
将尝试通过打破约束进行恢复

在objc_异常_抛出时中断,以便在调试器中捕获该异常。
中列出的UIView上UIConstraintBasedLayoutDebugging类别中的方法可能也会有所帮助。

好的,请尝试在集合视图上调用invalidateLayout,如下所示:

[myCollectionView.collectionViewLayout invalidateLayout];
这将强制集合视图在该点()更新其布局。我不确定,但我不认为当你改变滚动方向时会调用它

看看这能不能让你接近

这样做:

- (IBAction)changeDirection:(UIButton *)sender
{
     UICollectionViewFlowLayout *layout = (UICollectionViewFlowLayout *)[self.collectionView collectionViewLayout];
     if(layout.scrollDirection == UICollectionViewScrollDirectionHorizontal)
     {
        layout.scrollDirection = UICollectionViewScrollDirectionVertical;
     }
     else
     {
         layout.scrollDirection = UICollectionViewScrollDirectionHorizontal;
     }
}

它适合我。

在swift中,您可以执行以下操作:

//From the collection view subclass
    if let layout: UICollectionViewFlowLayout = self.collectionViewLayout as? UICollectionViewFlowLayout {
        layout.scrollDirection = .Vertical
    }

您可以使用集合视图outlet的属性observer
didSet{}
来执行此操作

假设collectionView的插座是myCollectionView,则在代码中向插座添加一个
didSet
属性观察者,并更改布局的方向。差不多-

@IBOutlet weak var myCollectionView:UICollectionView!{
      didSet{
            let layout = contentCollectionView.collectionViewLayout as!
UICollectionViewFlowLayout
            layout.scrollDirection = .Vertical
        }
}

通常情况下,collectionView会从对象库中删除到情节提要中,它会自动随FlowLayout一起提供。您可以通过告诉代码,当我获取集合视图时,希望其布局的滚动方向为水平或垂直来更改此布局的流动方向。

绘制集合视图的视图是否符合UICollectionViewFlowLayoutDelegate协议?您确定您试图绘制的内容量足够大,足以保证集合视图能够真正滚动吗?我们可以看到集合视图的更多设置吗?通过尝试在流布局上设置滚动方向,您正朝着正确的方向前进,这是一个好的开始@MatthewHallatt我已经添加了更多的信息。这是一个大桌子,可能有50-60个项目在4或5个部分。集合视图是底部的一个长条,可以水平滚动,可以单击按钮,使集合扩展到屏幕的几乎大部分(正在工作),但我希望滚动移动到垂直滚动。我尝试了这个方法,但得到了相同的结果,为了清楚起见,我也将整个错误放在了问题中。我很快就会简单地添加两个集合视图,并在需要时显示/隐藏它们,但这似乎是浪费资源。您是否在单元格中设置了自己的约束?如果是,是通过编程还是在interface builder中?问题似乎是,您可能试图保持标签的高度不变,但与单元格的顶部和底部保持一定的距离。如果要设置自己的约束,请尝试删除将标签固定在单元格底部的约束,或者删除约束标签高度的约束。或者也许我用这整句话找错人了!看起来这一切都是在interface builder中完成的。这里没有设置任何约束,所以我假设它们是自动完成的。我尝试添加了一些,但都是一样的。您是否在单元格上使用“prepareforeuse”方法进行任何操作?如果没有,请尝试将标签的文本设置为nil(@“”),同时将任何图像设置为nil,以防万一!我尝试在ViewForSupplementalElementOfKind中为视图返回nil,该视图绘制页眉和页脚,但效果相同。我复制了一份,删除了整个页眉和页脚的东西,因为(正如你所说)它看起来像那里的东西。对我来说仍然不起作用。即使我在更改后调用[layout invalidateLayout]也会有帮助:)
//From the collection view subclass
    if let layout: UICollectionViewFlowLayout = self.collectionViewLayout as? UICollectionViewFlowLayout {
        layout.scrollDirection = .Vertical
    }
@IBOutlet weak var myCollectionView:UICollectionView!{
      didSet{
            let layout = contentCollectionView.collectionViewLayout as!
UICollectionViewFlowLayout
            layout.scrollDirection = .Vertical
        }
}