带有集合视图的动态布局 iOS

Posted

技术标签:

【中文标题】带有集合视图的动态布局 iOS【英文标题】:Dynamic Layout iOS with Collection View 【发布时间】:2017-07-25 20:56:00 【问题描述】:

这可能是一个简单的问题——我是 ios 开发新手。

我有一个带有收藏视图的主页,其中有四个单元格在纵向模式下占据整个屏幕(左上角、右上角、左下角、右下角)。在横向模式下,我希望所有四个单元格并排排列。

Collection View 是使用正确的布局吗?我应该使用 Autoresizing 来执行此操作,还是必须使用其他一些布局约束?

谢谢!

【问题讨论】:

我会将前两个视图放在一个水平堆栈视图中,将后两个视图放在另一个水平堆栈视图中,然后将两个堆栈视图放在一个外部堆栈视图中,该视图在横向和垂直之间切换/肖像 【参考方案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)


【讨论】:

这个函数应该在哪里? 在您的视图控制器中,我编辑了答案,请检查【参考方案2】:

它应该是 UIStackView 和 Sizeclasses 之间的合并

stackviews 必须有填充均匀分布

默认选择的stackview必须有axis vertical,但是你应该添加横轴sizeclass width regular |高度任意

【讨论】:

以上是关于带有集合视图的动态布局 iOS的主要内容,如果未能解决你的问题,请参考以下文章

集合视图组合布局 - 动态布局

使用自定义集合视图布局快速配置动态单元格高度

使用自动布局自定义集合视图单元格的动态高度

iOS:自动布局动态数量的项目

UICollectionView 布局,带有用于 SearchBar 的部分标题和用于标题的另一个动态部分标题

动态设置自动布局以在 iOS 中滚动视图