在 Swift 上获取 UIView 和 UIImageView 的像素和点

Posted

技术标签:

【中文标题】在 Swift 上获取 UIView 和 UIImageView 的像素和点【英文标题】:Get pixels and points for UIView and UIImageView on Swift 【发布时间】:2021-05-07 22:50:10 【问题描述】:

我有一个 ViewController 和一个名为 MasterView 的 View(它是 ViewController 的第一个 UIView)

在 MasterView 里面,我有一个 UIImageView,两个视图的宽度都是 320,看看下面的图片:

但是当我尝试以编程方式获取图像大小时,我使用以下代码:

/* imagemPrincipalCabeca is an IBOutlet connected to the UIImageView */
print("master uiview frame: \(view.frame.width)")
print("master uiview bounds: \(view.bounds.width)")
print("subview uiimageview frame: \(imagemPrincipalCabeca.frame.width)")
print("subview uiimageview bounds: \(imagemPrincipalCabeca.bounds.width)")

我在控制台上得到以下文本:

master uiview frame: 375.0
master uiview bounds: 375.0
subview uiimageview frame: 320.0
subview uiimageview bounds: 320.0

如果我的代码中的 UIView 宽度和 UIImageView 是 320。为什么 view.frame.width 的结果是 375?

我知道设备屏幕像素是375,屏幕设备点数是320,但是为什么我使用上面的代码得到不同的值?

【问题讨论】:

您用于测试的设备型号是什么?可能是 iPhone X 375 x 812、iPhone 8、iPhone 7、iPhone 6s Plus、iPhone 6 Plus、iPhone 6s 和 iPhone 6 375 x 667 之一 你在画布布局中使用 iPhone SE 320 x 568 我在 Xcode 中使用 iPhone SE 第 1 代机型,在 ios 模拟器中使用 Iphone 8 那么您期望的屏幕尺寸是多少?它看起来对我来说是正确的。 你把print声明放在哪里了?如果将它们放在viewDidLoad 中,则图像视图将没有足够的时间进行布局。尝试打印viewDidLayoutSubviewsviewDidAppear 中的尺寸。 【参考方案1】:

基于@Sweeper 评论。 我测试了viewDidAppear 方法和viewDidLayoutSubviews 方法。 viewDidAppear 方法对我不起作用, 但viewDidLayoutSubviews 方法对我有用。

我使用ContainerView,也许这就是为什么我需要使用viewDidLayoutSubviews 方法来让我的代码获得正确的视图宽度。

【讨论】:

以上是关于在 Swift 上获取 UIView 和 UIImageView 的像素和点的主要内容,如果未能解决你的问题,请参考以下文章

使用 UIPanGestureRecognizer 从 CGRect 获取 UIView - Swift 2.0

如何访问添加到 UIScrollView 的 UIView 上的控件

如何从 Swift 中的 ViewController 获取 UIView 子类实例

从 URL 获取 UIView 的图像 [Swift]

无法仅获取在 Swift 中显示相机(AVCapturePhotoOutput)的 UIView 的屏幕截图

在 UIImage 上添加 UIView - swift - 以编程方式