MyUICollectionViewCell не отображается - PullRequest
0 голосов
/ 28 января 2019
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 голосов
/ 29 января 2019
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)
0 голосов
/ 29 января 2019

Немного странно размещать внутренние представления ячейки в 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)
}

}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...