Моя ячейка авторазмера в окне просмотра изменилась в два раза - PullRequest
0 голосов
/ 04 апреля 2019

Я хочу автоматически изменить размер моей ячейки моего коллекционного представления в соответствии с содержимым. Когда я щелкаю по ячейке, создается впечатление, что моя ячейка изменяет размеры дважды.

Что я сделал: https://imgur.com/a/05C7kzj

Мой код:

MainViewController.swift

override func viewDidLoad() {
        super.viewDidLoad()

if let layout = collectionView.collectionViewLayout as? UICollectionViewFlowLayout {
            layout.estimatedItemSize = UICollectionViewFlowLayout.automaticSize
        }
}

Также я попробовал это без удачи:

override func viewDidLoad() {
        super.viewDidLoad()

if let layout = collectionView.collectionViewLayout as? UICollectionViewFlowLayout,
            let collectionView = collectionView {
            let width = (collectionView.frame.width - 70) / 1.9
            let height = (collectionView.frame.height - 100) / 10
            layout.estimatedItemSize = CGSize(width: width, height: height)
        }
}
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {

        let width = view.frame.size.width - 40
        let height = (view.frame.size.height - 100) / 6
        let layout = collectionView.collectionViewLayout as! UICollectionViewFlowLayout
        layout.itemSize = CGSize(width: width, height: height)


        if indexPath.section == 1 {
            let width = (view.frame.size.width - 70) / 1.9
            let height = (view.frame.size.height - 100) / 10
            let layout = collectionView.collectionViewLayout as! UICollectionViewFlowLayout
            layout.itemSize = CGSize(width: width, height: height)
            return layout.itemSize
        }

        if indexPath.section == 2 {
            let width = (view.frame.size.width - 70) / 1.9
            let height = (view.frame.size.height - 100) / 10
            let layout = collectionView.collectionViewLayout as! UICollectionViewFlowLayout
            layout.itemSize = CGSize(width: width, height: height)
            return layout.itemSize
        }

        return layout.itemSize
    }

MyBusinessCell.swift:

override func preferredLayoutAttributesFitting(_ layoutAttributes: UICollectionViewLayoutAttributes) -> UICollectionViewLayoutAttributes {
        setNeedsLayout()
        layoutIfNeeded()
        let size = contentView.systemLayoutSizeFitting(layoutAttributes.size)
        var frame = layoutAttributes.frame
        frame.size.height = ceil(size.height)
        layoutAttributes.frame = frame
        return layoutAttributes
    }

PS: я думаю, что изменение размера работает, но почему делает это дважды?

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