Фон
Я создаю календарь в своем приложении для 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 - Установка свойства предполагаемого размера элемента на моеммакет объекта