获取顶部约束的参考

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

如果firstItemsecondItemSafe Area.Top,我该如何比较?

【问题讨论】:

IBOUtlet,和你的代码做个连接,你也可以通过约束标识符获取 @ReinierMelian 我附上了截图以供理解。我正在尝试以编程方式获取任何给定视图。 您需要手动在情节提要或 xib 中添加约束对吗? 我必须对与SafeArea.Top 关联的给定视图的 topConstraint 进行一些调整。这就是我试图获得参考的原因。 如果你想引用所有视图的***约束,我认为这种功能毫无意义,你需要在其上放置一个标识符或在情节提要中手动创建时将其设为 Outlet ,如果您稍后在您的代码或某人的代码上进行此更改,这将是痛苦的,但这是唯一的方法,或者至少是我知道的唯一方法,firstAttribute 和 secondAttribute 比较不可靠 【参考方案1】:

通过访问constraints 字段,您正在做的事情是不安全的。推荐的方法是为约束创建一个 IBOutlet

【讨论】:

以上是关于获取顶部约束的参考的主要内容,如果未能解决你的问题,请参考以下文章

以编程方式添加前导/顶部约束

iOS - 查找视图的顶部约束?

顶部安全区域约束动画

UIView 上的顶部空间约束,而不是 UIImag

自动布局不会减少顶部约束

无法将顶部约束添加到视图