Я создал UICollectionView, чтобы я мог упорядочить представления в аккуратные столбцы. Я бы хотел, чтобы на устройствах шириной 500 пикселей был один столбец.UICollectionView - изменение размеров ячеек на устройстве вращения - Swift
Для того, чтобы достичь этого, я создал эту функцию:
func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize {
let size = collectionView.frame.width
if (size > 500) {
return CGSize(width: (size/2) - 8, height: (size/2) - 8)
}
return CGSize(width: size, height: size)
}
Это работает, как ожидалось при первой загрузке, однако, когда я повернуть устройство, расчет не всегда повторился, и взгляды дон Всегда перерисовывайте, как ожидалось. Вот мой код, когда устройство вращается:
override func willRotateToInterfaceOrientation(toInterfaceOrientation: UIInterfaceOrientation, duration: NSTimeInterval) {
collectionView.collectionViewLayout.invalidateLayout()
self.view.setNeedsDisplay()
}
Я предполагаю, что я забыл перерисовывать что-то, но я не уверен, что. Любые идеи очень благодарны!
, используя этот подход, вы будете входить в бесконечный цикл. – valvoline
Я не уверен, что @valvoline правильно, что это вызовет бесконечный цикл - однако это может привести к проблемам с производительностью, поскольку это делает недействительным макет коллекции больше, чем это необходимо. Гораздо лучше использовать 'viewWillTransitionToSize'. – JosephH
Этот код вызывает бесконечный цикл. Это не должен быть правильный ответ. – Josh