获取顶部约束的参考
Posted
技术标签:
【中文标题】获取顶部约束的参考【英文标题】:Get reference of Top constraint 【发布时间】:2019-05-08 07:58:56 【问题描述】:我正在尝试获取与安全区域相关联的给定视图的 topConstraint(例如:附加)的引用 - 顶部。
我创建了一个运行良好的函数,但逻辑上不可靠。
func getSafeAreaTopConstraint(view: UIView, in targetView: UIView) -> NSLayoutConstraint?
let constraints = targetView.constraints.filter( $0.firstItem as? UIView == view || $0.secondItem as? UIView == view )
return constraints.filter( $0.firstAttribute == .top || $0.secondAttribute == .top ).first
我想创建一个比较如下的函数
func getSafeAreaTopConstraint(view: UIView, in targetView: UIView) -> NSLayoutConstraint?
let constraints = targetView.constraints.filter( ($0.firstItem as? UIView == view && $0.secondItem == SafeArea.Top) || ($0.secondItem as? UIView == view && $0.firstItem == SafeArea.Top) )
return constraints.filter( $0.firstAttribute == .top || $0.secondAttribute == .top ).first
如果firstItem
或secondItem
是Safe Area.Top
,我该如何比较?
【问题讨论】:
IBOUtlet,和你的代码做个连接,你也可以通过约束标识符获取 @ReinierMelian 我附上了截图以供理解。我正在尝试以编程方式获取任何给定视图。 您需要手动在情节提要或 xib 中添加约束对吗? 我必须对与SafeArea.Top
关联的给定视图的 topConstraint 进行一些调整。这就是我试图获得参考的原因。
如果你想引用所有视图的***约束,我认为这种功能毫无意义,你需要在其上放置一个标识符或在情节提要中手动创建时将其设为 Outlet ,如果您稍后在您的代码或某人的代码上进行此更改,这将是痛苦的,但这是唯一的方法,或者至少是我知道的唯一方法,firstAttribute 和 secondAttribute 比较不可靠
【参考方案1】:
通过访问constraints
字段,您正在做的事情是不安全的。推荐的方法是为约束创建一个 IBOutlet
【讨论】:
以上是关于获取顶部约束的参考的主要内容,如果未能解决你的问题,请参考以下文章