在viewWillLayoutSubviews中,我将视图的框架y原点设置为UIScreen.main.bounds.height,这意味着该视图不可见,因为它位于所有内容的下方(我确实将super.viewWillLayoutSubviews称为所有内容的顶部)。

在视图层次结构检查器中,视图的外观与预期的完全一样,但是在真实设备上,您可以看到较低的外观,即使在原始设备上,也可以在真实设备的屏幕底部看到它高度。

view hierarchy

real device view

我的问题是为什么自定义视图在实际设备上看起来会有所不同。
还有什么导致这个奇怪的错误?非常感谢您的任何反馈。

编辑:此视觉错误发生在除iPhone X之外的所有设备上

Edit2:这是我用来设置视图框架的代码

customView.frame.origin.x = 0
customView.frame.origin.y = UIScreen.main.bounds.height
customView.frame.size.width = UIScreen.main.bounds.width
customView.frame.size.height = UIScreen.main.bounds.height * 0.72

Edit3:发现了这个错误,很糟糕,我从一开始就没有发布此代码,我从没想到过会因此而发生错误。
    let imgView = UIImageView(frame: CGRect(x: 0, y: 0, width: customView.frame.width, height: customView.frame.height))
    imgView.contentMode = .scaleAspectFill
    imgView.image = gradientImage
    customView.addSubview(imgView)
    customView.sendSubview(toBack: imgView)

该错误来自以下行:
imgView.contentMode = .scaleAspectFill

更改为:
imgView.contentMode = .scaleToFill

非常抱歉,我从一开始就没有提到此问题,我想感谢大家的帮助,也感谢@matt指出此代码应位于viewDidLayoutSubviews()中。

最佳答案

看起来您的自定义视图要么是UIImageView,要么包含contentMode,可能是.aspectFill设置为clipsToBounds。如果是这种情况,请尝试将该图像视图的contentMode设置为true(或选中Interface Builder中的等效复选框)。

实际上,将.aspectFill设置为ojit_code的图像视图可能会将其内容溢出到图像视图的范围之外,因此这似乎就是这里发生的事情。

10-07 19:40