ios - Swift UICollectionViewCells 太分散了

标签 ios swift uicollectionview uicollectionviewcell

我试图将 5 个 UICollectionViewCell 放在一行中,虽然水平空间似乎足够,但每个单元格之间的空间太大。我不知道如何减少它。这是一些伪代码及其外观:

class ViewController: UIViewController {

    let my_view = MyView()

    override func viewDidLoad() {
        super.viewDidLoad()

        self.my_view.delegate = self

        self.my_view.translatesAutoresizingMaskIntoConstraints = false

        self.scroll_view.addSubview(self.my_view)

        self.my_view.centerXAnchor.constraint(equalTo: self.view.centerXAnchor).isActive = true
        self.my_view.topAnchor.constraint(equalTo: self.view.topAnchor, constant: 20).isActive = true
        self.my_view.widthAnchor.constraint(equalTo: self.view.widthAnchor).isActive = true
        self.my_view.bottomAnchor.constraint(equalToConstant: 100).isActive = true
    }


}

extension ViewController: UICollectionViewDelegateFlowLayout, UICollectionViewDataSource {

    func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
        return 5
    }

    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
        let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath) as! MyCell
        return cell
    }
}

class MyView: UIView {

    var delegate: ViewController! {
        didSet {
            self.collection_view.delegate = self.delegate
            self.collection_view.dataSource = self.delegate
        }
    }

    var collection_view: UICollectionView!

    init() {
        let layout = UICollectionViewFlowLayout()
        layout.sectionInset = UIEdgeInsets(top: 0, left: 5, bottom: 0, right: 5)
        layout.itemSize = CGSize(width: 60, height: 40)
        layout.minimumInteritemSpacing = 0
        layout.minimumLineSpacing = 0

        self.collection_view = UICollectionView(frame: .zero, collectionViewLayout: layout)
        self.collection_view.register(AgeCell.self, forCellWithReuseIdentifier: "cell")
        self.collection_view.backgroundColor = .clear
        self.collection_view.translatesAutoresizingMaskIntoConstraints = false

        self.addSubview(self.collection_view)

        self.collection_view.centerXAnchor.constraint(equalTo: self.centerXAnchor).isActive = true
        self.collection_view.widthAnchor.constraint(equalTo: self.widthAnchor).isActive = true
        self.collection_view.topAnchor.constraint(equalTo: self.title_label.bottomAnchor, constant: 15).isActive = true
        self.collection_view.heightAnchor.constraint(equalToConstant: 60).isActive = true
    }


}

class MyCell: UICollectionViewCell {

    let button: UIButton = {
        let button = UIButton(type: .system)
        button.backgroundColor = UIColor(r: 0, g: 0, b: 0, a: 100)
        button.setTitle("Test", for: .normal)
        button.layer.borderColor = UIColor.EVO_blue.cgColor
        button.layer.borderWidth = 1.0
        return button
    }()

    override init(frame: CGRect) {
        super.init(frame: frame)

        self.addSubview(self.button)
        self.button.frame = self.frame
    }

    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }

}

这是设备的宽度,只显示了 3 个:

我该怎么做才能让所有 5 个单元格都出现?谢谢。

最佳答案

使用UICollectionViewDelegateFlowLayout,您需要在sizeForItemAt 方法中返回正确的尺寸。我正在尝试编写逻辑来解决您的问题。

    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
    let width = (Globals.screenWidth - 60.0) / 5
    return CGSize(width: width, height: 80.0)
}

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, insetForSectionAt section: Int) -> UIEdgeInsets {
    return UIEdgeInsetsMake(0, 5, 0, 5)
}

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumLineSpacingForSectionAt section: Int) -> CGFloat {
    return 0.0
}

试试这个。

关于ios - Swift UICollectionViewCells 太分散了,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45558197/

相关文章:

ios - 如何制作带有圆角和单线边框的缩进 UITableViewCell

ios - UICollectionViewFlowLayoutminimumLineSpacing 不适用于整个 Collection View - Swift

ios - 停用并激活特定的UILocalNotification

ios - 如何随着内容大小的增加动态增加 UICollectionView 高度?

ios - 无法在AFNetworking POST请求上设置HTTP正文

ios - 在 Swift 中加载其他元素后,在 TableViewCell 中异步加载一个元素

ios - 以编程方式删除 UITableView 的标题并自动调整内容的大小以填充删除的区域

ios - 由于核心数据迁移,应用程序在从应用程序商店更新后崩溃

Swift:错误会忽略 try 语句

arrays - swift 发现 fatal error 为零