如何计算 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 的尺寸值。图像本身改变了大小,但是当我使用bounds
println()
的高度和宽度时,我得到了 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 中设置的属性——然而,这并不可靠。您应该在可以确定布局已经发生的地方进行自定义布局:例如在viewWillLayoutSubviews
或viewDidLayoutSubviews
。当布局以某种方式需要更改时,这两种方法也会被调用。在viewDidAppear
中,布局已经完成,因此您也可以进行一些布局。然而,当布局由于界面旋转而改变时,这个代码不会被调用。并且它会在呈现的 viewController 再次被解除后被调用。 (不是你想要的)。
在这两种情况下:在viewDidLoad
中创建新的imageViews 并在viewWillLayoutSubviews
或viewDidLayoutSubviews
中进行布局!
【讨论】:
好的,谢谢,我会这样做的。非常感谢您提供的信息以上是关于如何计算 UIImageView 的大小?的主要内容,如果未能解决你的问题,请参考以下文章
如何将图片分配给 UIImageView (Swift 3)
如何在swift中使用带有completionHandler的UIImageView load()函数
如何以全分辨率从 UIImageView 获取旋转、缩放和平移的图像?