如何计算 UIImageView 的大小?

How to calculate UIImageView size?

我有一个 Swift 应用程序,它将 UIImageView 设置为屏幕一部分的大小(使用自动约束设置它上面的边距和控件),并且我使用的高度和宽度值ImageView 以编程方式创建 3 个额外的 UIImageView,并将它们放置在原始图像的顶部。我正在建造一个讲台,并将三张图片放在讲台顶部的适当位置。然后我通过创建一个常量来计算每个附加图像的高度和宽度:let conImageHeight = 0.4 * self.imgPodium.frame.height。但是,我无法获得原始图像的可靠高度和宽度。

最初我使用 self.imgPodium.bounds.height,它非常适合 iPhone 6 模拟器屏幕尺寸,但是当我在 iPad 模拟器上尝试 运行 应用程序时,它保持iPhone 尺寸值。图像本身改变了大小,但是当我 println() 使用 bounds 的高度和宽度时,我得到了 iPhone 图像的值。

然后我更改并使用了 self.imgPodium.frame.height 但这并没有改变任何东西。

在通过自动约束定位后,是否有更好的方法来获取 UIImageView(或与此相关的任何控件)的高度和宽度?

谢谢。

我已经看过但没有帮助的问题: Change UIImageView size and position programmatically in Swift
how to check screen size of iphone 4 and iphone 5 programmatically in swift
UIImageView Bounds, Frame
Cocoa: What's the difference between the frame and the bounds?
How to resize an UIImageView (swift)

viewDidLoad 中,子视图已加载并初始化但尚未布局。因此,他们的 frame 属性 例如还无效,并且可能是在首先设计 UI 时在 Xcode 中设置的那个 - 然而这是不可靠的.您应该在可以确定布局已经发生的地方进行自定义布局:例如在 viewWillLayoutSubviewsviewDidLayoutSubviews 中。当布局以某种方式需要更改时,这两种方法也会被调用。在 viewDidAppear 中布局已经完成,因此您也可以进行一些布局。但是,当布局因界面旋转等原因发生变化时,此代码将不会被调用。并且它会在呈现的 viewController 再次被解雇后被调用。 (不是你想要的)。

在这两种情况下:在 viewDidLoad 中创建新的 imageView 并在 viewWillLayoutSubviewsviewDidLayoutSubviews 中进行布局!