Here are the CustomHeader and CustomCell classes (restricted due to post character limit):
CustomHeader:
class CustomHeader: UICollectionReusableView {
private lazy var label = makeLabel()
override init(frame: CGRect) {
super.init(frame: frame)
backgroundColor = UIColor.systemBlue.withAlphaComponent(0.10)
setupViews()
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
func set(headerText: String) {
DispatchQueue.main.async {
self.label.text = headerText
}
}
private func setupViews() {
addSubview(label)
NSLayoutConstraint.activate([
label.topAnchor.constraint(equalTo: topAnchor),
label.leadingAnchor.constraint(equalTo: leadingAnchor),
label.trailingAnchor.constraint(equalTo: trailingAnchor),
label.bottomAnchor.constraint(equalTo: bottomAnchor)
])
}
private func makeLabel() -> UILabel {
let label = UILabel()
label.text = "Header Title"
label.font = UIFont.systemFont(ofSize: 18, weight: .semibold)
label.textColor = .label
label.textAlignment = .left
label.numberOfLines = 0
label.translatesAutoresizingMaskIntoConstraints = false
return label
}
}
CustomCell:
class CustomCell: UICollectionViewCell {
private lazy var label = makeLabel()
private let padding: CGFloat = 20
override init(frame: CGRect) {
super.init(frame: frame)
setupViews()
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
func set(cellText: String) {
DispatchQueue.main.async {
self.label.text = cellText
}
}
private func setupViews() {
backgroundColor = .secondarySystemGroupedBackground
layer.cornerRadius = 12
layer.cornerCurve = .continuous
contentView.addSubview(label)
NSLayoutConstraint.activate([
label.topAnchor.constraint(equalTo: contentView.topAnchor, constant: padding),
label.leadingAnchor.constraint(equalTo: contentView.leadingAnchor, constant: padding),
label.trailingAnchor.constraint(equalTo: contentView.trailingAnchor, constant: -padding),
label.bottomAnchor.constraint(equalTo: contentView.bottomAnchor, constant: -padding)
])
}
private func makeLabel() -> UILabel {
let label = UILabel()
label.text = "No text available."
label.font = UIFont.systemFont(ofSize: 15, weight: .regular)
label.textColor = .label
label.textAlignment = .left
label.numberOfLines = 0
label.translatesAutoresizingMaskIntoConstraints = false
return label
}
}