如何防止 UILabel 比其他对象移动得更远

How to prevent UILabel from being moved further than other objects

我正在尝试移动带有动画的标签,但我希望它位于其他两个对象之间。我以为我可以用像

这样的 NSLayoutConstraints 来做到这一点
    let labelLeftConstraint = NSLayoutConstraint(item: self.label, attribute: NSLayoutAttribute.Left, relatedBy: NSLayoutRelation.GreaterThanOrEqual, toItem: self.leftObject, attribute: NSLayoutAttribute.Right, multiplier: 1, constant: 0)
    let labelRightConstraint = NSLayoutConstraint(item: self.label, attribute: NSLayoutAttribute.Right, relatedBy: NSLayoutRelation.LessThanOrEqual, toItem: self.rightObject, attribute: NSLayoutAttribute.Left, multiplier: 1, constant: 0)
    let labelBottom = NSLayoutConstraint(item: self.label, attribute: NSLayoutAttribute.Bottom, relatedBy: NSLayoutRelation.Equal, toItem: self.bottomObject , attribute: NSLayoutAttribute.Top, multiplier: 1, constant: 0)
    let labelCenterX = NSLayoutConstraint(item: self.label, attribute: NSLayoutAttribute.CenterX, relatedBy: NSLayoutRelation.Equal, toItem: self.movingObject, attribute: NSLayoutAttribute.CenterX, multiplier: 1, constant: 0)

    label.setTranslatesAutoresizingMaskIntoConstraints(false)
    self.view.addSubview(label)
    self.view.addConstraints([labelLeftConstraint, labelRightConstraint, labelBottom, labelCenterX])

我正在尝试用

更新位置
    UIView.animateWithDuration(0.5, delay: 0, options: UIViewAnimationOptions.CurveEaseOut, animations: { () -> Void in
        self.movingObject.center = CGPoint(x: newX, y: newY)
        self.view.updateConstraints()
    }

但是当 movingObject 移动得太远时它会裁剪标签(这显然是有道理的,因为 labelCenterX 应该等于 movingObject)。我怎样才能防止这种情况发生,而是仅将其移动到 leftObjectrightObject 的边缘?我需要类似 .LessEqualOrGreater 的关系...

我还尝试使用 .center 方法为标签设置动画,但我没有找到防止标签脱离两个对象的方法。



感谢您的帮助(我知道我可能问了一个愚蠢的问题,但我只是在学习 Swift)



编辑: 这是我的问题的屏幕截图:

movingObject 是自行车的图片,它从左到右以变化的速度移动,并且允许以超过栏的速度比标签走得更远。此标签应仅位于 030-Label

之间

编辑 2: 工作代码在我的 Git repository

解决方案是创建所需的 leading/trailing 约束 >= 0 和具有较低优先级的 centerX 约束,然后将 centerX 常量更改为您需要的任何值。