gpt4 book ai didi

ios - 如何使用 StackView 中 subview 的属性设置为按比例填充,因为它在旋转设备后重新计算

转载 作者:行者123 更新时间:2023-11-30 12:43:31 30 4
gpt4 key购买 nike

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

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

当我旋转设备时,角半径由旧方向的图像大小设置,而不是新方向的图像大小。感觉好像发生了向新方向的过渡,然后堆栈重新计算自身。拐角半径似乎在此发生之前更新。我希望帮助理解如何调用图像的高度属性,该属性将是设备旋转后新 View 中的高度,并且堆栈根据新方向重新计算图像大小。

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

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

最佳答案

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

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

感谢本文的受访者为我指明了正确的方向: View frame changes between viewWillAppear: and viewDidAppear:

<小时/>

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

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

关于ios - 如何使用 StackView 中 subview 的属性设置为按比例填充,因为它在旋转设备后重新计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41947332/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com