我试图在我的应用程序的顶部做一个小的水平UICollectionView,但每次我加载应用程序时,总是有2或3个单元格没有加载其内容。没有加载的细胞也在变化。
以下是我所做的:
public var collectionViewDates = UICollectionView(frame: .zero, collectionViewLayout: UICollectionViewFlowLayout())
override func viewDidLoad() {
super.viewDidLoad()
view.addSubview(collectionViewDates)
collectionViewDates.frame = CGRect(x: 0,
y: 90,
width: view.width,
height: 50)
}
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return 30
}
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: DatesCollectionViewCell.identifier, for: indexPath) as! DatesCollectionViewCell
cell.dateLabel.text = "I dag\(indexPath.row)"
return cell
}
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: DatesCollectionViewCell.identifier, for: indexPath) as! DatesCollectionViewCell
return CGSizeMake(cell.dateLabel.width + 30, collectionView.height)
}
在细胞中:
public var dateLabel: UILabel = {
let label = UILabel()
label.text = "I dag"
label.adjustsFontSizeToFitWidth = true
label.font = .systemFont(ofSize: 20, weight: .bold)
label.backgroundColor = .systemBlue
return label
}()
override init(frame: CGRect) {
super.init(frame: frame)
addSubview(dateLabel)
dateLabel.frame = CGRect(x: 0,
y: 0,
width: 50,
height: contentView.height)
dateLabel.center.y = contentView.center.y
dateLabel.center.x = contentView.center.x
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
我不明白为什么单元格有时会加载,因为我以前用其他水平UICollectionViews做过。但这一次我没有那么幸运。
以下是问题的图像:
1条答案
按热度按时间ioekq8ef1#
首先,花一点时间学习自动布局。
其次,如果您想要
50x50
单元格,请在集合视图的流布局上设置.itemSize
。看看这个:
结果:
编辑
如果希望单元格的大小适合标签的宽度...
为流布局指定 * 估计 * 项目大小:
并且不要将标签设置为自动缩小字体: