代码中定义的 NSLayoutConstraint 和底部布局指南在 iOS 11 中已弃用

App*_*Dev 3 ios nslayoutconstraint ios11 safearealayoutguide

我有一个 viewController 持有这样的约束:

self.subviewConstraint = NSLayoutConstraint(item: self.subviewConstraint,
                                                     attribute: .bottom,
                                                     relatedBy: .equal,
                                                     toItem: self.bottomLayoutGuide,
                                                     attribute: .bottom,
                                                     multiplier: 1,
                                                     constant: 0)
Run Code Online (Sandbox Code Playgroud)

我收到以下警告:

iOS 11.0 中已弃用“bottomLayoutGuide”:使用 view.safeAreaLayoutGuide.bottomAnchor 而不是 BottomLayoutGuide.topAnchor

我只是找到设置锚点而不是像NSLayoutConstraint这样的 s 的示例,并且我不完全理解此警告...“使用 view.safeAreaLayoutGuide.bottomAnchor不是 BottomLayoutGuide.topAnchor safeAreaLayoutGuide的底部锚点与顶部锚点如何匹配bottomLayoutGuide?我在哪里可以找到对此的良好图形解释?我应该如何正确地重写我的约束以保持其当前的行为?

And*_*ini 5

TopLayoutGuideBottomLayoutGuideiOS 11起已弃用

您可以利用新的 NSLayoutAnchor来更新您的代码:

self.subviewConstraint = self.subviewConstraint?.firstItem?.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.bottomAnchor)
Run Code Online (Sandbox Code Playgroud)

或者您可以使用NSLayoutConstraint的初始化程序,如您的问题所示:

self.subviewConstraint = NSLayoutConstraint(item: self.subviewConstraint?.firstItem as Any,
                                                    attribute: .bottom,
                                                    relatedBy: .equal,
                                                    toItem: view.safeAreaLayoutGuide,
                                                    attribute: .bottom,
                                                    multiplier: 1,
                                                    constant: 0)
Run Code Online (Sandbox Code Playgroud)

请注意,我已将您的self.subviewConstraint参数更改self.subviewConstraint.firstItemNSLayoutConstraint初始化方法中的参数,因为您使用 NSLayoutConstraint 作为项目。我想这是你犯的某种打字错误。

在这里,您可以找到有关iOS 11及更高版本中新SafeArea行为的一些很好的图形解释: iOS Safe Area - Medium.com

另外,您说“我只是在寻找设置锚点而不是 NSLayoutConstraints 的示例”,但我想明确指出NSLayoutAnchorconstraint(equalTo:)的方法返回NSLayoutConstraint。(苹果 NSLayoutAnchor 文档