/* * Copyright (c) Meta Platforms, Inc. and affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ import UIKit final class ManuallySelfSizingCell: UICollectionViewCell { private let label: UILabel = { let label = UILabel() label.backgroundColor = UIColor.green.withAlphaComponent(0.1) label.numberOfLines = 1 label.translatesAutoresizingMaskIntoConstraints = false return label }() var text: String? { get { return label.text } set { label.text = newValue } } override init(frame: CGRect) { super.init(frame: frame) contentView.backgroundColor = UIColor.background contentView.addSubview(label) NSLayoutConstraint(item: label, attribute: .top, relatedBy: .equal, toItem: contentView, attribute: .top, multiplier: 1, constant: 15).isActive = true NSLayoutConstraint(item: label, attribute: .leading, relatedBy: .equal, toItem: contentView, attribute: .leading, multiplier: 1, constant: 15).isActive = true NSLayoutConstraint(item: contentView, attribute: .bottom, relatedBy: .equal, toItem: label, attribute: .bottom, multiplier: 1, constant: 15).isActive = true NSLayoutConstraint(item: contentView, attribute: .trailing, relatedBy: .equal, toItem: label, attribute: .trailing, multiplier: 1, constant: 15).isActive = true } required init?(coder aDecoder: NSCoder) { fatalError("init(coder:) has not been implemented") } override func preferredLayoutAttributesFitting(_ layoutAttributes: UICollectionViewLayoutAttributes) -> UICollectionViewLayoutAttributes { setNeedsLayout() layoutIfNeeded() let size = contentView.systemLayoutSizeFitting(layoutAttributes.size) var newFrame = layoutAttributes.frame newFrame.size.width = ceil(size.width) newFrame.size.height = ceil(size.height) layoutAttributes.frame = newFrame return layoutAttributes } }