如何向 UICollectionView 标头中的标签添加约束?

Posted

技术标签:

【中文标题】如何向 UICollectionView 标头中的标签添加约束?【英文标题】:How do you add constraints to a label in a UICollectionView header? 【发布时间】:2021-12-29 07:12:05 【问题描述】:

我有一个无法添加约束的标签,因为它位于集合可重用视图中,它没有viewDidLoad 方法。是否可以将标头限制为始终距左侧 15 像素?

我尝试正常添加约束,但同样,可重用视图由于某种原因没有视图。我查看的其他解决方案都使用了各种视图。

 override func layoutSubviews() 
        super.layoutSubviews()
        headerTitle.translatesAutoresizingMaskIntoConstraints = false
        
        headerTitle.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 15).isActive = true
        headerTitle.trailingAnchor.constraint(equalTo: view.trailingAnchor).isActive = true
        headerTitle.topAnchor.constraint(equalTo: view.topAnchor, constant: 40).isActive = true
        headerTitle.bottomAnchor.constraint(equalTo: view.bottomAnchor).isActive = true
        
        headerTitle.frame = bounds
    

此代码抛出错误Cannot find 'view' in scope,我假设这是一个可重用视图而不是不存在的视图。这是我的其余代码:

class HeaderCollectionReusableView: UICollectionReusableView 
    static let identifier = "homeheader"
    
    private let headerTitle = UILabel()
    private let newDataSet = UIButton()
    
    override init(frame: CGRect) 
        super.init(frame:frame)
        
        headerTitle.text = "AppTitle"
        headerTitle.font = UIFont.systemFont(ofSize: 32.0, weight: .bold)
        headerTitle.textAlignment = .left
        headerTitle.numberOfLines = 0
        
        addSubview(headerTitle)
    
    
    required init?(coder: NSCoder) 
        fatalError()
    
    
    override func layoutSubviews() 
        super.layoutSubviews()
        
        headerTitle.frame = bounds //<-- want to replace this line with the constraints
    

我希望该解决方案也适用于按钮。这是我想要的输出: desired output from constraints

【问题讨论】:

你试过CGRect吗?只需执行 headerTitle.frame = CGRect(x: 0, y: 15, width: contentView.frame.size.width, height: 50)。代码未经过测试 【参考方案1】:

您正在尝试对标签设置约束,但您没有该标签的父视图。约束需要一些视图才能发挥作用。

【讨论】:

如何添加视图?需要传入还是可以在这里创建?

以上是关于如何向 UICollectionView 标头中的标签添加约束?的主要内容,如果未能解决你的问题,请参考以下文章

在 UICollectionView 中使用 reloadData 时如何从重新加载中排除标头

基于UILabel的动态UICollectionView标头大小

UICollectionView IOS 中的标头操作

如何获取 UICollectionView 标头的索引路径?

如何使用 UISearchBar 或 UISearchDisplayController 作为 UICollectionView 标头?

使用点击手势时如何获取 UICollectionView 标头的索引路径?