如何向 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 标头的索引路径?
如何使用 UISearchBar 或 UISearchDisplayController 作为 UICollectionView 标头?