Swift - UICollectionView:如何在标题中自动布局标签间距

Posted

技术标签:

【中文标题】Swift - UICollectionView:如何在标题中自动布局标签间距【英文标题】:Swift - UICollectionView: How to auto-layout the label spacing in the Header 【发布时间】:2016-07-24 15:01:34 【问题描述】:

我正在尝试创建自定义日历,我需要在更改方向时更改标题标签的间距。

我正在使用以下代码来更改单元格之间的大小和间距,但是如何对标题中的标签执行相同的操作。标头是一个自定义类。

override func viewWillTransitionToSize(size: CGSize, withTransitionCoordinator coordinator: UIViewControllerTransitionCoordinator) 

    super.viewWillTransitionToSize(size, withTransitionCoordinator: coordinator)
    updateCollectionViewLayout(with: size)



private func updateCollectionViewLayout(with size: CGSize) 

    let itemSizeForPortraitMode : CGSize = CGSize(width: 40, height: 40)
    let itemSizeForLandscapeMode: CGSize = CGSize(width: 40, height: 40)
    var minimumItemSpacing: CGFloat

    if let layout = calendarCollectionView.collectionViewLayout as? UICollectionViewFlowLayout 
        layout.itemSize = (size.width < size.height) ? itemSizeForPortraitMode : itemSizeForLandscapeMode

        minimumItemSpacing = (size.width -  (7 * 40)) / 6
        layout.minimumInteritemSpacing = minimumItemSpacing

        layout.invalidateLayout()
        calendarCollectionView.updateConstraints()

    

感谢您的帮助。

【问题讨论】:

【参考方案1】:

我找到了解决方案,我在我的标题自定义类中添加了一个函数:

 override func layoutSubviews() 

    super.layoutSubviews()

    var labelFrame = CGRect(x: 0.0, y: 43, width: self.bounds.size.width / 7.0, height: 20)

    for lbl in self.subviews 

        if lbl.tag == 1 || lbl.tag == 2 || lbl.tag == 3 || lbl.tag == 4 || lbl.tag == 5 || lbl.tag == 6 || lbl.tag == 7 
            lbl.frame = labelFrame
            labelFrame.origin.x += labelFrame.size.width
        

    


【讨论】:

以上是关于Swift - UICollectionView:如何在标题中自动布局标签间距的主要内容,如果未能解决你的问题,请参考以下文章

Swift:滚动时 UICollectionView 标题消失

swift UICollectionView + RxReachedBottom.swift

如何将 UIPageControl 连接到 UICollectionView (Swift)

Swift 4 UICollectionView 检测滚动结束

如何使用 swift 重置 UICollectionView 滚动位置?

Swift 3 - 带有填充的 UICollectionView 中心单元