Представление коллекции с различными типами ячеек: как изменить размер некоторых из них при изменении ориентации? - PullRequest
0 голосов
/ 26 августа 2018

Я зарегистрировал 2 различных пользовательских UICollectionViewCell типа:

collectionView.register(CustomCell1.self, forCellWithReuseIdentifier: "cell1")
collectionView.register(CustomCell2.self, forCellWithReuseIdentifier: "cell2")

Для одного из этих типов ячеек мне нужно, чтобы размер в портрете отличался от его размера в альбомной ориентации (у меня 2разделы, и каждый заполнен ячейками одного типа), и я реализовал collectionView(_:layout:sizeForItemAt:) следующим образом:

public func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
    if indexPath.section == 0 {
        return CGSize(width: 30, height: 30)
    }

    if UIInterfaceOrientationIsLandscape(UIApplication.shared.statusBarOrientation) {
        return CGSize(width: 300, height: 300)
    }

    return CGSize(width: 100, height: 100)
}

Снимок экрана для портрета:

enter image description here

Снимок экрана для ландшафта:

enter image description here

Кажется, это работает на iOS 11 (оранжевые ячейки изменяются при повороте устройства), но я получаю некоторые странные сообщения в Xcode, например:

[App], если мы находимся в реальном обработчике предварительной фиксации, мы не можем фактически добавлять какие-либо новые заборы из-за CAограничение

С другой стороны, это не работает вообще на iOS 10 (оранжевые ячейки не изменяются в размерах).

Как правильно обрабатывать этот сценарий?

...