Мне нужно сделать недействительным макет представления моей коллекции при изменении ориентации экрана Так как iPhone X и другие имеют вставки безопасной зоны; Мне нужно, чтобы мои подвиды ячеек располагались в соответствии со вставками в безопасных зонах экрана.
При переключении между лево-правым пейзажем из портрета проблем не возникает. Но если вы переключаетесь с перевернутого положения, я не могу уловить изменение ориентации и автоматически не могу
Я попробовал два существующих подхода.
Сначала используется NotificationCenter
. Вторая переопределяет viewWillTransitionToSize:withTransitionCoordinator:
функция. Это все то же самое.
в CollectionViewController:
NotificationCenter.default.addObserver(forName: UIDevice.orientationDidChangeNotification, object: nil, queue: nil) { (notif) in
self.collectionViewLayout.invalidateLayout()
}
в ячейке:
override func layoutSubviews() {
super.layoutSubviews()
let orientation = UIDevice.current.orientation
if let insets = UIApplication.shared.keyWindow?.safeAreaInsets {
if orientation == .landscapeLeft {
titleLabelLeadingConstraint.constant = insets.left + 20
titleLabelTrailingConstraint.constant = 20
} else if orientation == .landscapeRight {
titleLabelLeadingConstraint.constant = 20
titleLabelTrailingConstraint.constant = insets.right + 20
} else {
titleLabelLeadingConstraint.constant = 20
titleLabelTrailingConstraint.constant = 20
}
}
print("orin: \(orientation.rawValue) | left: \(titleLabelLeadingConstraint.constant) | right: \(titleLabelTrailingConstraint.constant)")
}
Функция print()
не вызывается при переключении с / на вверх. Но функция collectionviewlayout
s invalidateLayout()
вызывается.