CollectionView Insde TableViewCell не работает правильно в iOS - PullRequest
0 голосов
/ 25 января 2019

Я занимаюсь разработкой приложения, которое содержит UICollectionView внутри UITableViewCell. Но что происходит, так это то, что автоматическая ширина ячейки представления коллекции не работает правильно при перезагрузке данных. Вот скриншот. enter image description here

Вот код.

@IBOutlet weak var cv_inside: UICollectionView!
...
cv_inside.collectionViewLayout = AlignedCollectionViewFlowLayout(horizontalAlignment: .left, verticalAlignment: .top)

if let flowlayout = cv_inside.collectionViewLayout as? UICollectionViewFlowLayout {
    flowlayout.estimatedItemSize = CGSize(width: 1, height: 25)
    flowlayout.minimumLineSpacing = 10
}
cv_inside.isScrollEnabled = false
cv_inside.addObserver(self, forKeyPath: "contentSize", options: NSKeyValueObservingOptions.new, context: nil)
....
override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
    cv_inside.layer.removeAllAnimations()
    heightOfCollectionViewConstant.constant = cv_inside.collectionViewLayout.collectionViewContentSize.height
    UIView.animate(withDuration: 0.5) {
        self.updateConstraints()
        self.layoutIfNeeded()
    }
}

До iOS 12 все работало нормально, и я выяснил, что мне нужно добавить этот код.

contentView.translatesAutoresizingMaskIntoConstraints = false
    let leftConstraint = contentView.leftAnchor.constraint(equalTo: leftAnchor)
    let rightConstraint = contentView.rightAnchor.constraint(equalTo: rightAnchor)
    let topConstraint = contentView.topAnchor.constraint(equalTo: topAnchor)
    let bottomConstraint = contentView.bottomAnchor.constraint(equalTo: bottomAnchor)
    NSLayoutConstraint.activate([leftConstraint, rightConstraint, topConstraint, bottomConstraint])

Но даже если я добавил этот код, он не работает. Кто-нибудь может мне помочь, пожалуйста! Спасибо.

1 Ответ

0 голосов
/ 25 января 2019

Удалить эту строку:

flowlayout.estimatedItemSize = CGSize(width: 1, height: 25)

Вы также должны установить cellSize в интерфейсе enter image description here Builder следующим образом:

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