Изменение фрейма и содержимого Inset UICollectionView в layoutSubviews() с помощью IGListKit

Мне нужно изменить frame и верхняя вставка содержимого (contentInset.top) моего представления коллекции (который является UICollectionView). Изменения верхней вставки и кадра зависят от границ суперпредставления и смещения содержимого представления коллекции, поэтому я помещаю изменяющий вставку код в layoutSubviews(),

override func layoutSubviews() {
  super.layoutSubviews()

  collectionView.collectionViewLayout.invalidateLayout()
  collectionView.contentInset.top = new_inset_top
  collectionView.frame = new_frame
}

Тем не менее, представление коллекции не учитывает новые вставки, и журнал показывает следующее:

Поведение UICollectionViewFlowLayout не определено, потому что: высота элемента должна быть меньше высоты UICollectionView минус верхние и нижние значения вставок раздела, минус верхние и нижние значения вставок содержимого.

Как это исправить, чтобы представление коллекции отображалось правильно?

Я использую IGListKit

1 ответ

Вам не нужно делать все это внутри layoutSubviews,

в viewDidLoad реализовать это следующим образом

func viewDidLoad() {
    super.viewDidLoad()

    // let say you want 40px top inset
    collectionView.contentInset = UIEdgeInsetsMake(40, 0, 0, 0)
}

Другое дело, что я не понимаю, почему вы устанавливаете кадр в layoutSubviews, Там нет необходимости устанавливать frame изменить contentInset,

Другие вопросы по тегам