在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的图像视图可能会将其内容溢出到图像视图的范围之外,因此这似乎就是这里发生的事情。