NSLayoutConstraint 在 iOS 11 中已弃用的代码和底部布局指南中定义
Posted
技术标签:
【中文标题】NSLayoutConstraint 在 iOS 11 中已弃用的代码和底部布局指南中定义【英文标题】:NSLayoutConstraint defined in code and bottom Layout Guide deprecated in iOS 11 【发布时间】:2019-02-23 16:46:25 【问题描述】:我有一个 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
s,我不完全理解这个警告......“使用 view.safeAreaLayoutGuide.bottomAnchor 而不是 bottomLayoutGuide .topAnchor”? safeAreaLayoutGuide
的底部锚点如何与 bottomLayoutGuide
的顶部锚点匹配?我在哪里可以找到一个很好的图形解释?
我应该如何正确重写我的约束以保持其当前行为?
【问题讨论】:
【参考方案1】:TopLayoutGuide 和 bottomLayoutGuide 自 iOS 11 起已弃用。
您可以利用新的 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 的 constraint(equalTo:)
方法 返回一个 NSLayoutConstraint。 (Apple NSLayoutAnchor documentation)
【讨论】:
以上是关于NSLayoutConstraint 在 iOS 11 中已弃用的代码和底部布局指南中定义的主要内容,如果未能解决你的问题,请参考以下文章
iOS7中的NSLayoutConstraint动画持续时间
在 iOS7 中设置 NSLayoutConstraint 常量
NSLayoutConstraint 在 iOS 11 中已弃用的代码和底部布局指南中定义