IOS 11: UICollectionView на iPhone X имеет неправильный размер - PullRequest
0 голосов
/ 26 мая 2018

У меня есть представление о том, что на iPhone X рамка выглядит слишком высокой. На любом другом устройстве размеры и прокрутка работают правильно, как показано ниже:

enter image description here

Однако на iPhone X это выглядит так:

enter image description here

Верхний ряд обрезан, и он не прокручивает всевплоть до последнего ряда.Так или иначе, размер правильно вычисляет ширину, но не высоту, которая примерно на 70 пикселей выше.(Меня не беспокоит верхняя и нижняя панели. Я исправлю их позже)

Я предполагаю, что это как-то связано с настройками врезки для экрана iPhone X, но я не могувыяснить, как это исправить.Я пробовал это в том, где я измеряю представление коллекции:

if #available(iOS 11.0, *) {
    collectionView.contentInsetAdjustmentBehavior = .always
}

Однако, я не могу исправить это.

Редактировать:

Чтобы уточнить,настройка для этого меню выглядит следующим образом, фактически на экране есть два вида коллекции.Первая прокручивается горизонтально с включенной подкачкой, так что она фиксируется на каждой ячейке.Другие виды коллекций являются ячейками для первого, и они прокручиваются вертикально.Мы назовем эти subCollectionViews.

SubCollectionViews получают размер из исходного представления коллекции, который слишком высок.На раскадровке высота представления коллекции определяется относительно верхней панели и нижней панели подкачки как скрытая.В раскадровке высота представления коллекции примерно на 70 пикселей больше, чем расчетная высота во время выполнения.

Так что для руководства по компоновке ячейки:

override func awakeFromNib() {
    cellImage = UIImageView(frame: contentView.frame)
    cellImage?.contentMode = .scaleAspectFill
    cellImage?.clipsToBounds = true

    contentView.addSubview(cellImage!)
}

и для представления коллекциимакет:

        layout.scrollDirection = .vertical
        layout.minimumLineSpacing = 8
        layout.minimumInteritemSpacing = 8

для предустановок раскадровки:

enter image description here

Я думаю, это то, о чем вы просили.Если есть что посмотреть, просто спросите.

Ответы [ 2 ]

0 голосов
/ 24 июля 2018

Я тоже столкнулся с этой проблемой.Нужно вызвать safeAreaLayoutGuide для контроля размера элемента.

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {

        if #available(iOS 11.0, *) {
            return CGSize(width: view.safeAreaLayoutGuide.layoutFrame.width, height: view.safeAreaLayoutGuide.layoutFrame.height)
        } else {
            // Fallback on earlier versions
            return CGSize(width: view.frame.width, height: view.frame.height)
        }
    }
0 голосов
/ 26 мая 2018
Add below lines of code. I think it will solve your problem.

    override func viewWillAppear(_ animated: Bool) {
            super.viewWillAppear(animated)

            self.aCollectionVew.setNeedsLayout()
            self.aCollectionVew.layoutIfNeeded()
     }

Please take all traits, spacing and contentInsetAdjustmentBehavior. 

Happy Coding...:)
...