UICollectionView Rotation неправильный макет после поворота - PullRequest
0 голосов
/ 11 июня 2019

У меня есть UICollectionView, который составляет ровно 7 ячеек, между которыми нет отступов. Я сделал это, добавив макет потока без промежуточного или межстрочного интервала и рассчитав ширину следующим образом:

public func collectionView(
    _ collectionView: UICollectionView, 
    layout collectionViewLayout: UICollectionViewLayout, 
    sizeForItemAt indexPath: IndexPath
) -> CGSize {
    return CGSize(
        width: self.frame.width / CGFloat(7), 
        height: self.frame.height - headerHeight
    )
}

Это фантастически работает в моем приложении для iPhone

enter image description here

, где вращение не включено. На iPad, когда в портретном режиме это работает нормально.

enter image description here

При повороте, во-первых, приложение не перерисовывается, я пытался аннулировать Layout, однако это не решило проблему. Я должен прокрутить вниз, и я получаю следующий макет

enter image description here

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

enter image description here

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

1 Ответ

1 голос
/ 11 июня 2019

Добавьте это в ваш UIViewController класс

Он автоматически настроит макет при изменении ориентации устройства.

override func viewWillLayoutSubviews() {
    super.viewWillLayoutSubviews()

    guard let Coll_Layout = collVwPhotos.collectionViewLayout as? UICollectionViewFlowLayout else {
        return
    }
    Coll_Layout.invalidateLayout()
}
...