2017-07-25 96 views
1

这可能是一个简单的问题 - 我是iOS开发新手。动态布局iOS与集合视图

我有一个带有集合视图的主页,其中有四个单元格,它们以纵向模式占用整个屏幕(左上角,右上角,左下角,右下角)。在横向模式下,我希望所有四个单元格都连在一起。

是集合查看要使用的正确布局?我应该使用Autoresizing执行此操作,还是必须使用其他布局约束?

谢谢!

+0

我会将前两个视图置于水平堆栈视图中,将第二个视图置于另一个水平堆栈视图中,然后将这两个堆栈视图置于横向和纵向之间切换横向/纵向的外部堆栈视图 – dan

回答

1

UICollectionView是正确的布局使用。 可用于制造布局

func collectionView(collectionView: UICollectionView, 
        layout collectionViewLayout: UICollectionViewLayout, 
        sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize { 

    let flowLayout = collectionViewLayout as! UICollectionViewFlowLayout 
    let totalSpace = flowLayout.sectionInset.left 
     + flowLayout.sectionInset.right 
     + (flowLayout.minimumInteritemSpacing * CGFloat(4 - 1)) 
    let size = Int((collectionView.bounds.width - totalSpace)/CGFloat(4)) 
    return CGSize(width: size, height: size) 
} 

以下你可以使用它您的视图控制器内的方式如下

class ViewController: UIViewController, UICollectionViewDelegate, UICollectionViewDelegateFlowLayout { 

@objc(collectionView:layout:sizeForItemAtIndexPath:) 
func collectionView(_ collectionView: UICollectionView, 
        layout collectionViewLayout: UICollectionViewLayout, 
        sizeForItemAt indexPath: IndexPath) -> CGSize { 

    let flowLayout = collectionViewLayout as! UICollectionViewFlowLayout 
    let totalSpace = flowLayout.sectionInset.left 
     + flowLayout.sectionInset.right 
     + (flowLayout.minimumInteritemSpacing * CGFloat(4 - 1)) 
    let size = Int((collectionView.bounds.width - totalSpace)/CGFloat(4)) 
    return CGSize(width: size, height: size) 
} 
} 
+0

这个功能应该在哪里? –

+0

在你的视图控制器中,我编辑答案请检查 –

0

应该beetween UIStackView合并和Sizeclasses

you will need to use 3 stackviews

stackviews必须有填充equaly分布

enter image description here

选择stackview必须有轴垂直默认,但你应该添加横轴sizeclass 宽度正规|任何高度