layoutSubviews останавливает приложение при добавлении в UICollectionView - PullRequest
0 голосов
/ 13 июня 2018

Я хотел бы получить уведомление, когда мой пользовательский UICollectionView получит свой размер.Он создан из XIB.Я добавил следующую функцию:

override func layoutSubviews() {
    let layout = UICollectionViewFlowLayout()
    layout.scrollDirection = .vertical
    layout.itemSize = CGSize(width: segmentWidth(), height: segmentHeight())
    self.setCollectionViewLayout(layout, animated: false)
}

Эта функция вызывается бесконечно.Что я делаю неправильно?

1 Ответ

0 голосов
/ 13 июня 2018

Вам не нужно обновлять макет, как это, при изменении представления коллекции.

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

Я полагаю, что segmentHeight и segmentWidth - это функции, которые зависят от размера представления сбора, поэтому вам нужно пересчитать их?

Если это так, то вам следуетбыть в состоянии использовать delegate функции UICollectionViewFlowLayout.

Сначала обновите контроллер представления новым протоколом ...

class MyViewController: UICollectionViewDelegateFlowLayout

Это позволит вашему контроллеру представления действоватьв качестве делегата для схемы потока.

И используйте метод ...

func collectionView(UICollectionView, layout: UICollectionViewLayout, sizeForItemAt: IndexPath) -> CGSize {
    return CGSize(width: segmentWidth(), height: segmentHeight())
}

Что должно быть .

Если я 'мы что-то упустили, дайте мне знать, но вы должны получить все, что вы хотите от этого.

После этого просто удалите метод layoutSubviews, и он должен работать так, как вы хотите.

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