Ячейки CollectionView сначала кажутся слишком маленькими, а затем переходят к правильному размеру - PullRequest
0 голосов
/ 16 октября 2018

Фон

Я создаю календарь в своем приложении для iOS, построенный вокруг UICollectionView.Есть раздел для каждого месяца, затем ячейка для каждого дня.Мое представление календаря определено в xib, а затем загружено в мой пользовательский класс с использованием следующего кода внутри метода init:

Bundle.main.loadNibNamed("CalendarView", owner: self, options: nil)
addSubview(contentView)

contentView.frame = self.bounds
contentView.autoresizingMask = [.flexibleWidth, .flexibleHeight]

Мой переопределенный метод подпредставлений макета выглядит следующим образом:

override func layoutSubviews() {
    super.layoutSubviews()

    collectionView.layoutIfNeeded()
    layout.invalidateLayout() //My subclass of UICollectionViewFlowLayout
}

Я определяю размеры ячеек так, чтобы в строке всегда было 7, используя следующий метод в UICollectionViewDelegateFlowLayout:

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
    let width = (collectionView.bounds.width - 1) / 7.0
    return CGSize(width: width, height: min(width, 48))
}

Ячейки также определены в отдельном файле xib.


Проблема

Когда загружается содержащий контроллер представления, ячейки слишком малы, и примерно через 1 секунду они привязываются к правильному размеру.Это происходит только при первой загрузке, ширина верна после поворота или после изменения размера приложения в режиме многозадачности iPad.


Что я пробовал

Ничто из перечисленного не имеетсработало.

  • Вызов layoutSubviews() после настройки моей ячейки
  • Изменение размера ячейки UICollectionView в файле xib
  • Установка свойства предполагаемого размера элемента на моеммакет объекта

1 Ответ

0 голосов
/ 16 октября 2018

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

if let flowLayout = collectionView.collectionViewLayout as? UICollectionViewFlowLayout {    
    flowLayout.estimatedItemSize = CGSize(width: flowLayout.itemSize.width, height: flowLayout.itemSize.height)                                                     
}

Ссылка: статья об автоматической ячейке с изменением размера здесь .

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