【发布时间】:2020-07-02 15:00:39
【问题描述】:
我有一个UICollectionView,每行有三个单元格。除 iPhone SE 外,所有 iPhone 上的单元格之间都没有垂直间距。
iPhone SE 上的第二个和最后一个单元格之间大约有 1 点垂直间距。我不明白它来自哪里。如何摆脱它?
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let collection = ColorCollectionView(sectionHeadersPinToVisibleBounds: false)
self.view.addSubview(collection)
collection.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor, constant: 8).isActive = true
collection.leadingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.leadingAnchor, constant: 8).isActive = true
collection.trailingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.trailingAnchor, constant: -8).isActive = true
collection.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.bottomAnchor, constant: -8).isActive = true
collection.translatesAutoresizingMaskIntoConstraints = false
let colors: [UIColor] = [.systemGray, .systemGray2, .systemGray3,
.systemGray, .systemGray2, .systemGray3,
.systemGray, .systemGray2, .systemGray3,
.systemGray, .systemGray2, .systemGray3,
.systemGray, .systemGray2, .systemGray3,
.systemGray, .systemGray2, .systemGray3,
.systemGray, .systemGray2, .systemGray3,
.systemGray, .systemGray2, .systemGray3,
.systemGray, .systemGray2, .systemGray3,
.systemGray, .systemGray2, .systemGray3,
.systemGray, .systemGray2, .systemGray3,
.systemGray, .systemGray2, .systemGray3,]
collection.colors = colors
}
}
class ColorCollectionView: UICollectionView {
var colors: [UIColor] = []
var selectedColor: UIColor?
var headerName: String?
override init(frame: CGRect, collectionViewLayout layout: UICollectionViewLayout) {
super.init(frame: frame, collectionViewLayout: layout)
self.backgroundColor = .clear
self.register(ColorCollectionViewCell.self, forCellWithReuseIdentifier:ColorCollectionViewCell.identifier)
self.dataSource = self
self.delegate = self
}
convenience init(sectionHeadersPinToVisibleBounds: Bool) {
let layout = UICollectionViewFlowLayout()
layout.sectionHeadersPinToVisibleBounds = sectionHeadersPinToVisibleBounds
layout.scrollDirection = .vertical
self.init(frame: .zero, collectionViewLayout: layout)
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
extension ColorCollectionView: UICollectionViewDelegateFlowLayout {
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
return CGSize(width: collectionView.frame.width / 3, height: 60)
}
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout,
minimumInteritemSpacingForSectionAt section: Int) -> CGFloat {
return CGFloat.leastNormalMagnitude
}
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumLineSpacingForSectionAt section: Int) -> CGFloat {
return 8
}
}
extension ColorCollectionView: UICollectionViewDataSource {
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return colors.count
}
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: ColorCollectionViewCell.identifier, for: indexPath)
let color = colors[indexPath.row]
cell.backgroundColor = color
return cell
}
}
class ColorCollectionViewCell: UICollectionViewCell {
static let identifier = "ColorCollectionViewCell"
}
我已经包含了我所有的代码。
更新
视图的宽度:375.0
CollectionView 的宽度:359.0
CollectionVeiwCell 的宽度:119.66666666666667
【问题讨论】:
-
你是在模拟器还是真机上测试?
-
@CZ54 我都在模拟器真机上测试过了。
-
CGSize(width: collectionView.frame.width / 3, height: 60)那有什么价值?我猜这是一条“半像素线”(“一半”,在您的情况下是“三分之一”或“三分之二”)。
标签: ios swift uicollectionview uicollectionviewcell