如何计算 UIImageView 的大小?

Posted

技术标签:

【中文标题】如何计算 UIImageView 的大小?【英文标题】:How to calculate UIImageView size? 【发布时间】:2015-05-17 07:50:19 【问题描述】:

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

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

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

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

谢谢。

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

【问题讨论】:

您在哪里尝试访问 self.imgPodium 维度?视图加载了吗?也许这些约束还没有计算出来? @Bhendricks 是的,它在 override func viewDidLoad() 中调用 您可能需要在viewDidLoad 中输入layoutSubviews 以获取完整的数字,或将代码移至viewDidAppear @BHendricks 好的,我在viewDidAppear 中调用了代码,这似乎有效。你知道为什么它在viewDidLoad 中不起作用吗? 【参考方案1】:

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

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

【讨论】:

好的,谢谢,我会这样做的。非常感谢您提供的信息

以上是关于如何计算 UIImageView 的大小?的主要内容,如果未能解决你的问题,请参考以下文章

如何将图片分配给 UIImageView (Swift 3)

如何在swift中使用带有completionHandler的UIImageView load()函数

如何以全分辨率从 UIImageView 获取旋转、缩放和平移的图像?

用 UIImageView 替换 UIRefreshControl

获取uiimageview下的uiview部分?

IOS:用 UIImageView 填充 NSArray