gpt4 book ai didi

ios - Swift:动态调整大小标签的宽度约束

转载 作者:行者123 更新时间:2023-11-28 11:16:32 24 4
gpt4 key购买 nike

关于自动约束和动态调整大小标签的问题。

我有一个计时器标签,最初显示 00:00.00(分、秒、毫秒)。当此计时器达到一小时或更长时间时,我希望将标签的大小调整为 00:00:00.00,同时保留 .Centerx 约束。标签上的文本对齐设置为左对齐,以便数字计数不会“抖动”文本,因为它会重新对齐不同大小的文本。

我的约束设置如下:

InitialConstraints

这是计时器最初或仅计算分钟时的样子(最多 59:59:59) MinutesView

下面是计算小时数时的样子。

HoursView

现在的问题是,当涉及小时时,宽度会动态调整大小(由于大于约束),这会导致计时器标签在计算不同的毫秒数时抖动。

我希望在计算小时数时将标签的宽度调整为 150,在不计算小时数时调整回 110,同时保留 CenterX 常量。

当计数以小时为单位时,我尝试以编程方式重新调整标签的大小:

let widthConstraint = NSLayoutConstraint(item: TimerLabel, attribute: NSLayoutAttribute.Width, relatedBy: NSLayoutRelation.GreaterThanOrEqual, toItem: nil, attribute: NSLayoutAttribute.NotAnAttribute, multiplier: 1, constant: 150)

if Double(hours) != 0{
TimerLabel.text = "\(strHours):\(strMinutes):\(strSeconds).\(strFraction)"

TimerLabel.addConstraint(widthConstraint)
}

现在在我的重置按钮的 IBAction 函数中我还有:

let widthConstraint2 = NSLayoutConstraint(item: TimerLabel, attribute: NSLayoutAttribute.Width, relatedBy: NSLayoutRelation.GreaterThanOrEqual, toItem: nil, attribute: NSLayoutAttribute.NotAnAttribute, multiplier: 1, constant: 110)

TimerLabel.removeConstraint(widthConstraint)
TimerLabel.addConstraint(widthConstraint2)

然而,一旦计时器重置,标签将显示如下:

enter image description here

文本不再位于 View 中心。我还尝试在重置函数中为 .CenterX 编程宽度约束,并且重置标签位置也不会发生变化。

是否有更简单的方法通过 Interface Builder 执行此操作?有任何想法吗?

谢谢

最佳答案

尝试使文本标签比实际更宽,然后将文本居中。当添加更多字符时,它将保留中心位置。

关于ios - Swift:动态调整大小标签的宽度约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31398792/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com