Как использовать атрибуты подпредставлений в StackView, установленном в значение "Пропустить пропорционально", так как он пересчитывается после вращения устройства
Я реализовал вид стека, заполненный пропорционально изображениями и метками, а также текстом и кнопками внутри всплывающего окна над моим основным контроллером вида. Когда я переключаюсь на поповер, я использую вид, который будет переопределен, чтобы определить угловой радиус изображения, которое я называю ProfileImage, равным 1/2 его высоты, чтобы он выглядел как круг.
Когда я поворачиваю устройство, стек пересчитывает и изменяет размер изображения профиля. Я попытался использовать приведенный ниже код, чтобы настроить радиус угла так, чтобы при переходе вида это был круг. Я пробовал этот код как в блоке завершения, так и в блоке рядом с переходом.
Когда я поворачиваю устройство, радиус угла определяется размером изображения в СТАРОЙ ориентации, а не в НОВОЙ ориентации. Такое ощущение, что происходит переход к новой ориентации, и затем стек пересчитывает сам себя. Радиус угла, кажется, обновляется, прежде чем это произойдет. Я хотел бы помочь понять, как вызвать свойство высоты изображения, которое будет высотой в новом представлении после вращения устройства, и стек пересчитывает размер изображения на основе этой новой ориентации.
Спасибо за любые рекомендации, которые вы можете предоставить. Пожалуйста, см. Ниже для рассматриваемого кода:
override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {
coordinator.animate(alongsideTransition: { context in
context.viewController(forKey: UITransitionContextViewControllerKey.from)
}, completion: {(context) -> Void in
self.view.layoutSubviews()
self.ProfileImage.layer.cornerRadius = self.ProfileImage.bounds.size.height / 2
print(self.ProfileImage.frame.size.height)
})
}
1 ответ
Ответ, который близок, но не совершенен, состоит в том, чтобы установить угловой радиус в viewWillLayoutSubviews() вместо в viewWillTransition(), потому что представление UIStack выкладывает свои подпредставления после поворота, а не во время него.
override func viewWillLayoutSubviews() {
self.ProfileImage.layer.cornerRadius = self.ProfileImage.frame.size.height / 2
}
спасибо респондентам этой статьи за то, что они указали мне правильное направление: просмотр изменений кадра между viewWillAppear: и viewDidAppear:
Теперь моя проблема в том, что размер представления UIImage изменился на несколько пикселей после вызова viewDidLayoutSubviews. Есть ли еще одна функция, которая будет вызываться, когда представление стека или автопроявление перезапускается после DidLayoutSubviews?
Приложение выглядит хорошо, но происходит другое поведение, которое я не понимаю.