10

自动调整大小的蒙版是否适用于 iPhoneX?

当 Apple去年在 Auto Layout 中推出 What's New 时,一切正常,没有任何限制

但是,当我在 iPhoneX 模拟器上尝试自动布局时,它不适用于安全区域

(✓ 使用安全区域布局指南)

Auto Layout (without constraint)

在此处输入图像描述

With constraints 在此处输入图像描述

4

1 回答 1

14

如果有人找到,是否有任何替代方法,请在此处更新答案可能是我做错了

我尝试了一些东西并在需要的地方自定义了自己,在这里我在 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)
])
于 2017-09-27T08:22:41.407 回答