我宣布一个按钮:
let button = UIButton(frame: CGRect(x: ?, y: ?, width: 50, height: 50))
但我们请注意确保如何相对于安全区设置x
和y
,以便它在>= iOS 11
和<= iOS 10
上都能正常运作。
我尝试使用self.view.safeAreaInsets
但由于某种原因它返回0.0。任何想法如何解决这个问题?
答案 0 :(得分:0)
制作动画时我也有同样的问题。
最终解决的问题,想法:创建一个等于safeArea框架的框架。
(仅设备方向为左和右)
CGRect safeAreaFrame;
if (@available(iOS 11.0, *)) {
UIEdgeInsets safeAreaInsets = self.view.safeAreaInsets;
safeAreaFrame = CGRectMake(safeAreaInsets.left,
safeAreaInsets.top,
self.view.frame.size.width - safeAreaInsets.left - safeAreaInsets.right,
self.view.frame.size.height - safeAreaInsets.top - safeAreaInsets.bottom);
} else {
safeAreaFrame = self.view.frame;
}
然后使用安全区域框架,例如:
UIView *view = [[UIView alloc] initWithFrame:safeAreaFrame];
view.backgroundColor = UIColor.redColor;
[self.view addSubview:view];
注意:安全区域插图在viewDidLoad中返回(0,0,0,0), 因此它们的设置要晚于viewDidLoad, 放入viewSafeAreaInsetsDidChange或viewDidAppear中。 希望对您有帮助。
答案 1 :(得分:0)
对于iOS 11:
如果在self.view.safeAreaInsets
上调用 viewDidLoad, viewWillAppear, etc
将为零
如果您在viewDidLayoutSubviews, viewDidAppear
上调用它,它应该具有该值