ios 如何更新swift布局锚点? 您所在的位置:网站首页 nslayoutconstraint ios 如何更新swift布局锚点?

ios 如何更新swift布局锚点?

2023-03-14 15:22| 来源: 网络整理| 查看: 265

您是否尝试过将使用布局锚定创建的相关约束保存到属性中,然后只更改常量?

var ticketTop : NSLayoutConstraint? func setup() { ticketTop = ticketContainer.topAnchor.constraintEqualToAnchor(self.topAnchor, constant:100) ticketTop.active = true } func update() { ticketTop?.constant = 25 }可能更优雅

根据您编写扩展的喜好,这里有一种可能更优雅的方法,它不使用属性,而是在NSLayoutAnchor和UIView上创建扩展方法,以帮助更简洁地使用。首先,你需要在NSLayoutAnchor上写一个扩展,如下所示:

extension NSLayoutAnchor { func constraintEqualToAnchor(anchor: NSLayoutAnchor!, constant:CGFloat, identifier:String) -> NSLayoutConstraint! { let constraint = self.constraintEqualToAnchor(anchor, constant:constant) constraint.identifier = identifier return constraint } }

此扩展允许您在从锚创建约束的同一方法调用中设置约束的标识符。注意,Apple文档暗示XAxis锚点(左、右、行距等)不允许您使用Y轴锚点创建约束(顶部、底部等),但我没有观察到这是真的。如果你确实想要这种类型的编译器检查,您需要为NSLayoutXAxisAnchor、NSLayoutYAxisAnchor和NSLayoutDimension(用于宽度和高度约束)编写单独的扩展,以强制执行相同轴锚类型的要求。接下来,您将在UIView上编写一个扩展,以通过标识符获得约束:

extension UIView { func constraint(withIdentifier:String) -> NSLayoutConstraint? { return self.constraints.filter{ $0.identifier == withIdentifier }.first } }

有了这些扩展,您的代码就变成了:

func setup() { ticketContainer.topAnchor.constraintEqualToAnchor(anchor: self.topAnchor, constant:100, identifier:"ticketTop").active = true } func update() { self.constraint(withIdentifier:"ticketTop")?.constant = 25 }

请注意,使用常量或枚举而不是魔术字符串名称作为标识符将是对上述方法的改进,但我的回答要简明扼要。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有