在viewWillLayoutSubviews中,我将视图的第y帧原点设置为UIScreen.main.bounds.height,这意味着该视图不应该是可见的,因为它在所有内容之下(我会调用super.viewWillLayoutSubviews)在一切之上)。
在视图层次结构检查器中,视图看起来与预期完全一样,但在真实设备上,您可以看到它看起来更低,它可以在真实设备的屏幕底部看到,即使它是原点是屏幕高度。
我的问题是为什么自定义视图在真实设备上看起来不同。 是什么导致这个奇怪的错误?非常感谢任何反馈,感谢提前。
编辑:此可视错误发生在除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()中。< / p>
答案 0 :(得分:1)
您的自定义视图看起来像是(或包含)UIImageView
,可能contentMode
设置为.aspectFill
。如果是这种情况,请尝试将该图片视图的clipsToBounds
设置为true(或检查Interface Builder中的等效复选框)。
将contentMode
设置为.aspectFill
的图片视图实际上可以将其内容从图片视图的边界溢出,这样看起来就像是在这里发生的事情。 / p>