对于具有您希望经常更改的相对值的约束,是否存在推荐的模式?
这里是场景:我有一个类似滑块的控件,我将拇指视图相对于其父视图的宽度定位。我可以轻松地为此创建相对约束:将子视图约束到其父视图的相对边缘,并使用乘数设置其相对位置。
问题是拇指视图需要移动:当用户滑动它时,它的相对位置需要改变。如果可以动态地改变乘数,那就是解决方案。但是,NSLayoutConstraint.multiplier
是一个只读属性!
另一种方法是将.constant
值设置为相对于父级宽度的显式值。但是如果父视图的大小发生变化,这会发生故障 - 在更新周期的适当点捕获视图宽度的更改以更新约束是很棘手的。
有更好的方法吗?似乎它应该是可能的,但我还没有完全概念化Apple的思考方式...
有什么想法吗?谢谢!
答案 0 :(得分:0)
当用户滑动它时,它的相对位置需要改变。
然后在用户拖动时以正常方式(通过更改视图的框架/中心)更改其位置。这就是如何实现可拖动视图:当用户执行触摸手势时,您不断更改其框架/中心。这非常有效;你可能有限制这个“拇指”视图的事实是无关紧要的。
只有在出现布局时才会出现问题;此时,如果您有自动布局限制,他们将接管。如果它们与拇指的当前位置不匹配,它将跳回原来的位置。你不希望这样!所以你有两个简单的可能性:
不要使用约束来定位/调整此“拇指”。并非层次结构中的每个视图都必须使用自动布局。
如果您确实使用约束来定位/调整“拇指”的大小(我可以看到您可能想要的原因),那么在后用户移动了拇指(这实际上意味着你已经通过设置它的框架/中心改变了它的“拇指”位置,正如我已经说过的那样,用新的位置约束替换它的位置约束。