【问题标题】:Swift - UICollectionView: How to auto-layout the label spacing in the HeaderSwift - UICollectionView:如何在标题中自动布局标签间距
【发布时间】: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()

    }
}

感谢您的帮助。

【问题讨论】:

    标签: ios uicollectionview uicollectionviewlayout


    【解决方案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
            }
    
        }
    
    }
    

    【讨论】: