我被怪异的行为困住了
我以编程方式在'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附加了一些照片:
滑块
标签
答案 0 :(得分:1)
这是因为您已将它们放置在stackview中! 因此,stackview正在抑制其他约束。
我怎么知道它被抑制了?
viewdebugger是一个非常强大的工具,但其大多数功能尚不清楚。
右侧约束的颜色传达了含义。
FWIW灰色和黑色约束均是活动的,但并非每个活动约束都被应用。例如您可能对标签的宽度有一百个约束,每个约束具有不同的优先级。当所有它们都处于活动状态时,除了具有最高优先级的约束之外,它们都将被忽略。
您会看到☝️label.trailing = self.trailing @1000
被忽略了。而且当您将优先级设置为'1000'时,我非常确定调试器会向您转储警告,但是您在问题中并未提及它们。
我认为您可能需要的是
stackView.alignment = .trailing
并确保您删除了其他尾随约束。
如果您希望滑块延伸到stackview的整个宽度,则将其限制为stackview的宽度。标签从其intrinsicContentSize
获得宽度,这很好。
TBH我不确定这是否是最好的方法,但我认为它可行。如果有人知道更好的方法,请发表评论。