[英]Add trailing constraint between two views
我被一个奇怪的行为卡住了
我以编程方式在 'UISlider' 和 'UILabel' 之间添加了一个尾随约束,它看起来像这样:
NSLayoutConstraint *timeLabelTrailing = [NSLayoutConstraint
constraintWithItem:_timeLbl
attribute:NSLayoutAttributeTrailing
relatedBy:NSLayoutRelationEqual
toItem:_seekBar
attribute:NSLayoutAttributeTrailing
multiplier:1
constant:0];
[timeLabelTrailing setActive:true];
[self layoutIfNeeded];
并且“UILabel”尾随与“UISlider”尾随不匹配。
我试图在 'UILabel' 和 'UIViewControoler' 视图之间做同样的事情,它工作得很好,但是使用 'UISlider' 就出错了。
附上一些来自 ViewDebugger 的照片:
滑块
标签
这是因为你已经把这些放在了一个堆栈视图中! 因此,stackview 正在抑制其他约束。
我怎么知道它被压制了?
viewdebugger 是一个非常强大的工具,但它的大部分功能是未知的。
右侧约束的颜色传达了含义。
FWIW 灰色和黑色约束都处于活动状态,但并非每个活动约束都得到应用。 例如,您可以对标签的宽度进行数百个限制,每个限制都有不同的优先级。 虽然它们都处于活动状态,但除了具有最高优先级的约束之外,它们将被忽略。
正如你所看到的 ☝️label.trailing label.trailing = self.trailing @1000
被忽略了。 当您忽略“1000”的优先级时,我非常确定调试器正在向您发出警告,但您没有在问题中提及它们。
长话短说,当您将东西放在 stackview 中时,您不应该自己添加太多约束。
我想你可能需要的是
stackView.alignment = .trailing
并确保删除其他尾随约束。
如果您希望滑块拉伸到 stackview 的整个宽度,则将其限制为 stackview 的宽度。 标签从其intrinsicContentSize
大小获取其宽度,这很好。
TBH 我不确定这是否是最好的方法,但我认为它有效。 如果有人知道更好的方法,请发表评论。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.