UICollectionViewCells太分散了

UICollectionViewCells太分散了

我试图在一行中容纳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个显示:
ios - Swift UICollectionViewCells太分散了-LMLPHP
我该怎么做才能让所有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/

10-11 17:44