我创建了一个水平集合视图,它计算自己的高度,但高度没有按预期计算。
我的flowlayout和高度约束代码如下:
if let flowLayout = collectionViewAppName.collectionViewLayout as? UICollectionViewFlowLayout {
flowLayout.estimatedItemSize = UICollectionViewFlowLayout.automaticSize
flowLayout.scrollDirection = .horizontal
flowLayout.sectionInset = .init(top: 0, left: 0, bottom: 0, right: 32)
flowLayout.minimumLineSpacing = 8
flowLayout.minimumInteritemSpacing = 0
}
let height = collectionViewAppName.contentSize.height
collectionViewAppName.heightAnchor.constraint(equalToConstant: height).isActive = true
集合视图单元格类:
final class AppTypeCollectionViewCell: UICollectionViewCell {
@IBOutlet private weak var viewContainer: UIView!
@IBOutlet private weak var stackViewContent: UIStackView!
@IBOutlet private weak var imageViewAppLogo: UIImageView!
@IBOutlet private weak var labelAppType: UILabel!
@IBOutlet private weak var viewContainerOfImageView: UIView!
override func awakeFromNib() {
super.awakeFromNib()
initViews()
}
private func initViews() {
viewContainer.backgroundColor = .systemGray6
labelAppType.font = UIFont.prepareGillSansSemiBoldFont(size: 15)
viewContainer.clipsToBounds = true
viewContainer.layer.cornerRadius = 16
imageViewAppLogo.layer.cornerRadius = 8
viewContainer.layer.borderColor = UIColor.Custom.foregroundColor.cgColor
viewContainer.layer.borderWidth = 1.5
imageViewAppLogo.contentMode = .scaleAspectFill
imageViewAppLogo.clipsToBounds = true
}
func configure(with model: AppTypeCellModel) {
let appType = model.appType
imageViewAppLogo.image = appType.appLogo
labelAppType.text = appType.appName
if appType == .allApps {
viewContainerOfImageView.isHidden = true
}
}
func configureSelectedItem() {
viewContainer.backgroundColor = UIColor.Custom.foregroundColor
labelAppType.textColor = .black
}
func clearPreviousSelectedItem() {
viewContainer.backgroundColor = .clear
labelAppType.textColor = .label
}
override func prepareForReuse() {
super.prepareForReuse()
labelAppType.textColor = .label
viewContainer.backgroundColor = .clear
viewContainerOfImageView.isHidden = false
}
}
我通过给它一个固定值来实现我想要的高度,例如55。我附上了我想要的结果和我编写的代码的屏幕截图。
那么,这里有什么问题吗?
我使用“contentsize”来计算其自身的高度,但它不能按预期工作。
具有流布局的
UICollectionView
根据 YOU 分配的集合视图框架大小来排列其单元格。
如果您在设置集合视图的框架时不知道单元格的高度(或者单元格高度可能在应用程序运行时发生变化),那么您将需要计算单元格高度并在运行时更新集合视图框架。