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

时间:2019-02-23 16:46:26

标签: ios ios11 nslayoutconstraint safearealayoutguide

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

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

并且正在向我显示此警告:

  

'bottomLayoutGuide'在iOS 11.0中已被弃用:使用view.safeAreaLayoutGuide.bottomAnchor而不是bottomLayoutGuide.topAnchor

我只是在寻找设置锚点的示例,而不是像这样的NSLayoutConstraint,并且我还不完全理解此警告...“改为使用view.safeAreaLayoutGuide。 bottomAnchor 的bottomLayoutGuide。 topAnchor ”? safeAreaLayoutGuide的底部锚点与bottomLayoutGuide的底部锚点如何匹配?在哪里可以找到关于此的图形说明? 我应该如何正确重写约束以保持其当前行为?

1 个答案:

答案 0 :(得分:0)

iOS 11 起,已弃用

TopLayoutGuide bottomLayoutGuide

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

self.subviewConstraint = self.subviewConstraint?.firstItem?.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.bottomAnchor)

,或者您可以在问题中使用 NSLayoutConstraint 的初始化程序:

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

请注意,在 NSLayoutConstraint 初始化方法中,我已将self.subviewConstraint参数更改为self.subviewConstraint.firstItem,因为您使用的是NSLayoutConstraint。 我想这是您做的错字。

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

此外,您还说过“我只是在寻找设置锚点的示例,而不是NSLayoutConstraints” ,但我想明确指出, NSLayoutAnchor < / strong>返回 NSLayoutConstraint 。 (Apple NSLayoutAnchor documentation