【发布时间】: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中,则图像视图将没有足够的时间进行布局。尝试打印viewDidLayoutSubviews或viewDidAppear中的尺寸。