iPhone X的自动调整大小功能

10

自动调整大小掩码在iPhoneX上是否有效?

去年苹果推出了自动布局的新功能,当没有约束条件时,一切正常。

但是,当我在iPhoneX模拟器上尝试自动布局时,它对安全区域无效。

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

自动布局(无约束)

输入图片描述

使用约束条件 输入图片描述


那问题是什么? - jonaszmclaren
如果我之前使用自动布局(没有约束条件),那么按钮的位置将不在安全区域内。 - Willjay
1
你的问题很好。 - Anbu.Karthik
关于在iPhone X和安全区域中使用自动布局的相关问题,请参见以下链接:https://dev59.com/JKXja4cB1Zd3GeqPP1u0#46342821 和 https://dev59.com/wlYO5IYBdhLWcg3wIuPp#46301283 - jonaszmclaren
指定自动调整大小掩码是为没有约束的视图设置简单的调整大小行为。因此,如果在iPhoneX上无法正常工作,则需要使用约束设置我的视图。 - Willjay
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)
])

请问下投票的原因是什么,如果有用的话我会更新我的回答。 - Anbu.Karthik
目前为止,它确实帮了我很多。谢谢!但是,我正在寻找Storyboard文件,如何为iPhone X和普通iPhone设备进行设置。无论如何,我已经点赞了这个答案。 - Anilkumar iOS - ReactNative

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接