有关Auto Contraints和动态可调整大小标签的问题。
我有一个初始显示00:00.00(分钟,秒,毫秒)的计时器标签。当此计时器达到一小时或更长时间时,我希望将标签大小调整为00:00:00.00,同时保留.Centerx约束。标签上的文字对齐设置为左,以便数字的计数不会“抖动”。文本重新证明了不同大小的文本。
我的约束设置如下:
下面是计时器最初的显示方式或仅计时(最多59:59:59)
并说明当小时数涉及计数时它应该如何看待。
现在的问题是,当涉及小时时,宽度会动态调整大小(由于大于约束),这会导致计时器标签在计算不同的毫秒时抖动。
我希望在计算小时宽度为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)
但是,一旦计时器重置,标签显示如下:
文字不再是视图的中心。我还尝试在复位功能中为.CenterX编写宽度约束,并且在复位标签位置也不会产生任何变化。
通过Interface Builder有更简单的方法吗?有任何想法吗?
谢谢
答案 0 :(得分:2)
尝试使文本标签比它更宽,然后使文本居中。当添加更多字符时,它将保留中心定位。
答案 1 :(得分:1)
正如Fonix建议的解决方案是使用固定宽度字体,这在iOS9中很容易实现。
let originalFont = UIFont.systemFontOfSize(26)
let originalFontDescriptor = originalFont.fontDescriptor()
let fontDescriptorFeatureSettings = [
[
UIFontFeatureTypeIdentifierKey: kNumberSpacingType,
UIFontFeatureSelectorIdentifierKey: kMonospacedNumbersSelector
]
]
let fontDescriptorAttributes = [UIFontDescriptorFeatureSettingsAttribute: fontDescriptorFeatureSettings]
let fontDescriptor = originalFontDescriptor.fontDescriptorByAddingAttributes(fontDescriptorAttributes)
let font = UIFont(descriptor: fontDescriptor, size: 0)
TimerLabel.font = font