自动调整大小掩码在iPhoneX上是否有效?
去年苹果推出了自动布局的新功能,当没有约束条件时,一切正常。
但是,当我在iPhoneX模拟器上尝试自动布局时,它对安全区域无效。
(✓ 使用安全区域布局指南)
自动布局(无约束)
自动调整大小掩码在iPhoneX上是否有效?
去年苹果推出了自动布局的新功能,当没有约束条件时,一切正常。
但是,当我在iPhoneX模拟器上尝试自动布局时,它对安全区域无效。
(✓ 使用安全区域布局指南)
自动布局(无约束)
如果有人找到其他解决方法,请在此更新答案,也许我做错了
我尝试过一些东西并自定义您需要的地方,在这里我在ViewController中使用了以下代码:
在底部基于您的视图有一个按钮,在这里我计算sa
例如
@property (strong, nonatomic) IBOutlet UIButton *btnKarthik;
#pragma mark - Lifecycle
- (void)viewDidLoad
{
[super viewDidLoad];
CGRect modifyframe = self.btnKarthik.frame;
// here i changed the bottom origin Y position of my UIButton
modifyframe.origin.y = modifyframe.origin.y - [self getsafeAreaBottomMargin];
self.btnKarthik.frame = modifyframe;
}
常见的方法是
- (CGFloat) getsafeAreaBottomMargin {
if (@available(iOS 11.0, *)) {
UIWindow *currentwindow = UIApplication.sharedApplication.windows.firstObject;
return currentwindow.safeAreaLayoutGuide.owningView.frame.size.height - currentwindow.safeAreaLayoutGuide.layoutFrame.size.height - currentwindow.safeAreaLayoutGuide.layoutFrame.origin.y;
} else {
return 0;
}
}
Swift3 及以上版本
override func viewDidLoad() {
super.viewDidLoad()
var modifyframe: CGRect = btnKarthik.frame
// here i changed the bottom origin Y position of my UIButton
modifyframe.origin.y = modifyframe.origin.y - getsafeAreaBottomMargin()
btnKarthik.frame = modifyframe
}
常见的方法如下:
func getsafeAreaBottomMargin() -> CGFloat {
if #available(iOS 11.0, *) {
let currentwindow = UIApplication.shared.windows.first
return (currentwindow?.safeAreaLayoutGuide.owningView?.frame.size.height)! - (currentwindow?.safeAreaLayoutGuide.layoutFrame.size.height)! - (currentwindow?.safeAreaLayoutGuide.layoutFrame.origin.y)!
}
else {
return 0
}
}
iPhone X的输出
其他iPhone家族的输出
将控件从iPhone X的边缘移开。在创建约束时使用安全区域布局指南和布局边距指南(如果手动设置框架,则使用safeAreaIsets或layoutMargins)。
let margin = view.layoutMarginsGuide
NSLayoutConstraint.activate([
btnKarthik.leadingAnchor.constraint(equalTo: margin.leadingAnchor),
btnKarthik.bottomAnchor.constraint(equalTo: margin.bottomAnchor)
])