swift - NSLayoutConstraint 和 safeAreaLayoutGuide - 编码兼容 iOS 11 之前的版本

标签 swift ios10 ios11 nslayoutconstraint safearealayoutguide

如果我想要一个与 iOS 11 之前的设备兼容的应用程序,我是否需要为每个将 View 的某些属性链接到 self.view 的约束使用此代码以遵守 safeAreaLayoutGuide?

if #available(iOS 11.0, *) {
     NSLayoutConstraint.activate([
          theImage.heightAnchor.constraint(equalTo: view.safeAreaLayoutGuide.heightAnchor, multiplier: 0.5)
          theImage.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.bottomAnchor, constant: -20),
          theImage.trailingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.trailingAnchor, constant: -view.frame.width/8)
     ])
} else {
     NSLayoutConstraint.activate([
          theImage.heightAnchor.constraint(equalTo: view.heightAnchor, multiplier: 0.5)
          theImage.bottomAnchor.constraint(equalTo: view.bottomAnchor, constant: -20),
          theImage.trailingAnchor.constraint(equalTo: view.trailingAnchor, constant: -view.frame.width/8),
     ])
}

最佳答案

该代码看起来正确。如果您担心到处都是重复的内容,可以通过多种方式对其进行整合。你可以这样做:

extension UIViewController {

    var correctLayoutGuide: UILayoutGuide {
        if #available(iOS 11.0, *) {
            return view.safeAreaLayoutGuide
        }
        else {
            return view.layoutMarginsGuide
        }
    }

}

那么你的代码片段可以是:

NSLayoutConstraint.activate([
      theImage.heightAnchor.constraint(equalTo: correctLayoutGuide.heightAnchor, multiplier: 0.5)
      theImage.bottomAnchor.constraint(equalTo: correctLayoutGuide.bottomAnchor, constant: -20),
      theImage.trailingAnchor.constraint(equalTo: correctLayoutGuide.trailingAnchor, constant: 20)
 ])

关于swift - NSLayoutConstraint 和 safeAreaLayoutGuide - 编码兼容 iOS 11 之前的版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48937256/

相关文章:

ios - 如何像 iMessage 群聊一样在导航栏中放置 Collection View

firebase - 错误: Could not build Objective-C module 'Firebase'

encryption - 如果我使用第三方库进行 AES 加密,App Store 是否接受我的应用程序?

swift - arc4random_uniform 方法的文档在哪里?

prepareForSegue 的 Swift 2 到 3 迁移

ios - 如何使用iOS11集成二维码阅读器打开应用

iOS 11 beta 9 空键盘按键

ios - 触发从表格单元格到另一页的 Segue

ios - 如何保留对符合 Swift 协议(protocol)的类对象的引用

swift - 从 firestore 分配用户名值