0

我已经实现了一个堆栈视图,其中在我的主视图控制器的弹出框内按比例填充了图像、标签、文本和按钮。当我转到弹出框时,我使用视图将出现覆盖,以将我称为 ProfileImage 的图像的角半径定义为其高度的 1/2,以便它显示为圆形。

当我旋转设备时,堆栈会重新计算并更改 profileImage 的大小。我试图使用下面的代码来调整角半径,以便在视图转换时它是一个圆。我已经在完成块和 sideTransition 块中尝试了这段代码。

当我旋转设备时,角半径由 OLD 方向的图像大小设置,而不是 NEW 方向。感觉好像发生了向新方向的过渡,然后堆栈重新计算自己。在这种情况发生之前,角半径似乎会更新。我想帮助了解如何调用图像的高度属性,该属性将是设备旋转后新视图中的高度,并且堆栈根据该新方向重新计算图像大小。

感谢您提供的任何指导。请参阅下面的相关代码:

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)
    })  
}
4

1 回答 1

0

一个接近但不完美的答案是在 viewWillLayoutSubviews() 而不是 viewWillTransition() 中设置角半径,因为 UIStack 视图在旋转之后而不是在旋转期间布置其子视图。

override func viewWillLayoutSubviews() {
   self.ProfileImage.layer.cornerRadius = self.ProfileImage.frame.size.height / 2 
}

感谢本文的受访者为我指明了正确的方向: viewWillAppear: 和 viewDidAppear: 之间的视图框架变化:


我现在的问题是,在 viewDidLayoutSubviews 调用之后,UIImage 视图的大小以某种方式改变了几个像素。当堆栈视图或自动布局在 DidLayoutSubviews 之后重新计算时,是否会调用另一个函数?

该应用程序看起来不错,但发生了一些我不明白的其他行为。

于 2017-01-31T21:37:44.153 回答