帧原点不同于一组

时间:2018-04-10 22:01:37

标签: ios swift

在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()中。< / p>

1 个答案:

答案 0 :(得分:1)

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

contentMode设置为.aspectFill的图片视图实际上可以将其内容从图片视图的边界溢出,这样看起来就像是在这里发生的事情。 / p>