Получение правильного readableContentGuide после поворота - PullRequest
2 голосов
/ 06 апреля 2020

У меня есть вложенный collectionView, для которого я хотел бы получить readableContentGuide после поворота, чтобы правильно установить вставку содержимого.

Вот как это выглядит:

enter image description here

Я уже пытался разделить представление коллекции на подклассы и получить значение из layoutMarginsDidChange, traitCollectionDidChange и layoutSubviews.

Однако значение Я получаю, что всегда есть предыдущее значение (то есть, когда я в портрете, я получаю значение пейзажа и наоборот)

Я также пытался установить вставку в collectionView collectionView(_:layout:insetForSectionAt:).

В настоящее время единственное решение, которое, кажется, работает, это наблюдение за границами представления коллекции, но это выглядит немного странно.

Есть мысли о том, как это можно сделать?

1 Ответ

1 голос
/ 16 апреля 2020

Если вы используете Autolayout на раскадровке , вы должны активировать опцию «Follow Readable Width» для суперпредставления. Сначала убедитесь, что представление коллекции прикреплено к полям суперпредставления. Затем go для суперпредставления и откройте инспектор размера и выберите опцию:
Follow Readable Width
Спасибо, Мэтт за ответ .

Для программирования c Autolayout вам не нужны поля, просто присоедините представление коллекции к readableContentGuide суперпредставления. Например:

let cv = collectionView

// Guide of the superview
let readableGuide = view.readableContentGuide 

NSLayoutConstraint.activateConstraints([
    cv.topAnchor.constraintEqualToAnchor(readableGuide.topAnchor),
    cv.bottomAnchor.constraintEqualToAnchor(readableGuide.bottomAnchor),
    cv.rightAnchor.constraintEqualToAnchor(readableGuide.rightAnchor),
    cv.leftAnchor.constraintEqualToAnchor(readableGuide.leftAnchor)
])

Если вы предпочитаете основанную на кадрах программу c layout , вам не нужно использовать layoutMarginsDidChange, traitCollectionDidChange суперпредставления, ни наблюдать bounds. Лучшее место для разметки кода - viewWillLayoutSubviews() прикол c контроллера. Это будет обрабатывать любые изменения границ, включая повороты интерфейса.

override func viewWillLayoutSubviews() {
    super.viewWillLayoutSubviews()

    collectionView.frame = view.readableContentGuide.layoutFrame

    collectionView.collectionViewLayout.invalidateLayout()
}

Здесь Я объясняю, почему нам нужно invalidateLayout().

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