MyUICollectionViewCell不可见

时间:2019-01-28 02:49:08

标签: ios arrays swift uicollectionview

import UIKit

private let reuseIdentifier = "NewCell"

class SeondViewController: UIViewController, UICollectionViewDelegateFlowLayout {
    @IBOutlet var myNavBar: UINavigationBar!
    var frutta: [String]!

    override func viewDidLoad() {
        super.viewDidLoad()

        let margins = self.view.layoutMarginsGuide

        let layout = UICollectionViewFlowLayout()

        layout.sectionInset = UIEdgeInsets(top: 30, left: 10, bottom: 10, right: 10)
        layout.scrollDirection = .vertical

        let newCollectionView: UICollectionView = UICollectionView(frame: self.view.frame, collectionViewLayout: layout)

        newCollectionView.dataSource = self
        newCollectionView.delegate = self
        newCollectionView.register(SecondTabCollectionViewCell.self, forCellWithReuseIdentifier: reuseIdentifier)
        newCollectionView.reloadData()
        newCollectionView.backgroundColor = UIColor.clear
        newCollectionView.isHidden = false
        newCollectionView.translatesAutoresizingMaskIntoConstraints = false

        self.view.addSubview(newCollectionView)

        frutta = ["Mele", "Olive", "Pere", "Noci", "Banane", "Kiwi", "Ananas"]
        myNavBar.leadingAnchor.constraint(equalTo: margins.leadingAnchor).isActive = true
        myNavBar.topAnchor.constraint(equalTo: margins.topAnchor).isActive = true
        myNavBar.trailingAnchor.constraint(equalTo: margins.trailingAnchor).isActive = true
        newCollectionView.leadingAnchor.constraint(equalTo: margins.leadingAnchor).isActive = true
        newCollectionView.topAnchor.constraint(equalTo: myNavBar.bottomAnchor).isActive = true
        newCollectionView.trailingAnchor.constraint(equalTo: margins.trailingAnchor).isActive = true
    ◦           newCollectionView.bottomAnchor.constraint(equalTo: margins.bottomAnchor).isActive = true

    }

    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
        return CGSize(width: collectionView.bounds.size.width / 2, height: collectionView.bounds.size.height / 3)
    }
}

extension SecondViewController: UICollectionViewDataSource {
    func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
        return frutta.count
    }

    func numberOfSections(in collectionView: UICollectionView) -> Int {
        return 1
    }

    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
        let myCell = collectionView.dequeueReusableCell(withReuseIdentifier: reuseIdentifier, for: indexPath) as! SecondTabCollectionViewCell
        myCell.backgroundColor = UIColor.clear

        myCell.secondCellLabel = UILabel()
        myCell.secondCellLabel.frame.size = CGSize(width: myCell.bounds.width / 2, height: myCell.secondCellLabel.bounds.height / 2)
        myCell.secondCellLabel.adjustsFontSizeToFitWidth = true
        myCell.secondCellLabel.backgroundColor = UIColor.clear
        myCell.secondCellLabel.textColor = UIColor.black
        myCell.secondCellLabel.text = frutta[indexPath.item]
        myCell.translatesAutoresizingMaskIntoConstraints = false
        myCell.contentView.addSubview(myCell.secondCellLabel)

        return myCell
    }

}

extension SecondViewController: UICollectionViewDelegate {
    func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
        print("Hai premuto \(indexPath.row).")
    }

}

import UIKit

class SecondTabCollectionViewCell: UICollectionViewCell {
    var secondCellLabel: UILabel!

    override init(frame: CGRect) {
        super.init(frame: frame)
    }
    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) non e stato implementato.")
    }
}

2 个答案:

答案 0 :(得分:0)

cellForRowAtIndexPath中布置单元格的内部视图有点奇怪,这应该在单元格类本身中完成。基本问题是您的UILabel出现在单元格的左上角,并且高度为零,因此您看不到它。我将cellForRowAtIndexPath中的代码移到单元格本身中。

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
    let myCell = collectionView.dequeueReusableCell(withReuseIdentifier: reuseIdentifier, for: indexPath) as! SecondTabCollectionViewCell
    myCell.backgroundColor = UIColor.clear
    myCell.secondCellLabel.text = frutta[indexPath.item]
    return myCell
}

import UIKit

class SecondTabCollectionViewCell: UICollectionViewCell {

var secondCellLabel: UILabel = {
    let label = UILabel()
    label.translatesAutoresizingMaskIntoConstraints = false
    label.backgroundColor = .clear
    label.textColor = .black
    label.adjustsFontSizeToFitWidth = true
    label.textAlignment = .center
    return label
}()

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

required init?(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)
}

private func configureViews() {
    addSubview(secondCellLabel)
}

override func layoutSubviews() {
    super.layoutSubviews()
    configureLayout()
}

private func configureLayout() {
    let width = bounds.width / 2
    let height = frame.height / 2
    let size = CGSize(width: width, height: height)
    let origin = CGPoint(x: width/2, y: height/2)
    secondCellLabel.frame = CGRect(origin: origin, size: size)
}

}

答案 1 :(得分:0)

myCell.secondCellLabel.frame.size = CGSize(width: myCell.bounds.width / 2, height: myCell.secondCellLabel.bounds.height / 2)

cellForItemAt中的上一行是错误的,您将标签的高度设置为myCell.secondCellLabel.bounds.height而不是myCell.bounds.height。

正确的是

myCell.secondCellLabel.frame.size = CGSize(width: myCell.bounds.width / 2, height: myCell.bounds.height / 2)