以状态栏的1个像素的差异启动UIView

时间:2017-10-09 04:47:52

标签: ios objective-c uiview autoresize iphone-x

针对不同的iPhone设备,如iPhone X& iPhone 8.我想使用 autoresizing 在状态栏的1px差异处启动 UIView 。我能够通过在iPhone X之前启动 UIView y轴21px来解决这个问题。我怎样才能动态地实现这个功能,以便 UIView 总是在所有iphone的staus bar之后启动。

在iPhone 8上加上它看起来很好

enter image description here

在iPhone X上没有看到1px的差异,因为视图从顶部开始

enter image description here

2 个答案:

答案 0 :(得分:2)

iPhone X更新

以前,所有iPhone设备的状态栏高度均为20pt。但在iPhone X上,这是44pt。因此在实施UI时要小心。

如果您想更新mainthread中的UI或在viewWillAppear中调用。

CGFloat getstatusBarHeight = [[UIApplication sharedApplication] statusBarFrame].size.height;
CGRect modifyFrame = your1PxFrame.frame ;
modifyFrame.origin.y =  getstatusBarHeight ;
your1PxFrame.frame = modifyFrame;

答案 1 :(得分:2)

你应该使用autolayout!

使用autolayout and xcode 9,您可以像下面一样管理它!

将UIView放在你的故事板或iphone 7或8的xib中!

然后在其上放置UIView(您想要一个像素空间的视图)。

将其设为y成为21 pixel

然后从safe area给出该视图的顶部约束,并给出其他需求约束,如前导,尾随固定高度等。

请参阅下面的屏幕截图以便更好地理解!

Python: about catching ANY exception

结果是:

iPhone 8 plus:

enter image description here

iPhone X:

enter image description here