000*_*010 15 iphone ios autolayout iphone-x
关于iPhone X Autolayout怪癖的问题.
我有两个按钮,以前这些按钮会与超视图对齐,偏移量为20,不会让它们触及屏幕底部(我已经将链接更改为安全区域而非Superview).
现在,底部约束的20常量使得按钮看起来很时髦,并且距离iPhone X上的主页栏太远了.

从逻辑上讲,我需要从iPhone X上的约束中删除20常量,并使按钮直接与安全区域的底部对齐.

我在Apple文档中遗漏了这个问题的直接解决方案吗?无法使用大小类,因为在这种情况下,iPhone X大小类与其他iPhone重叠.
我可以很容易地编码来检测iPhone X并将约束上的常量设置为0,但我希望有一个更优雅的解决方案.
谢谢,
Apple Docs声称iOS 11中有一个新的声明可以解决这个问题.目前iPhone X和iPhone 8共享相同的大小类,因此我们必须提出另一种解决方案.
var additionalSafeAreaInsets:UIEdgeInsets {get set}
在AppDelegate中添加以下代码,rootViewController的所有子代将继承额外的安全区域.以下示例屏幕截图描述了此行为.
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
// Override point for customization after application launch.
if !self.isIphoneX() {
self.window?.rootViewController?.additionalSafeAreaInsets = UIEdgeInsets(top: 0, left: 0, bottom: 20, right: 0)
}
return true
}
func isIphoneX() -> Bool {
if #available(iOS 11.0, *) {
if ((self.window?.safeAreaInsets.top)! > CGFloat(0.0)) {
return true;
}
}
return false
}
Run Code Online (Sandbox Code Playgroud)
iPhone X Interface Builder与安全区域对齐
iPhone 8 Interface Builder与安全区域对齐
iPhone X模拟器 - 主屏幕
iPhone X模拟器 - 详细信息屏幕
iPhone 8模拟器 - 主屏幕
iPhone 8模拟器 - 详细信息屏幕
直接从情节提要中实现此效果的另一种方法是创建两个约束:
1.在元素和安全区域之间,优先级为0的优先级
为250。2.在元素和超级视图底部之间,优先级为750且常数为20的greater Than or Equal关系。
| 归档时间: |
|
| 查看次数: |
3803 次 |
| 最近记录: |