如何在iOS / Swift中为指定的宽度创建固定宽度标签?

时间:2017-03-09 04:53:13

标签: ios swift uilabel

说我正在创建一个计算器,我知道我将支持最多20个数字的纵向和40个数字的横向。

如何创建或调整标签大小以显示最大位数,以便在我们添加或删除结果中的数字时不会继续调整大小?

我到目前为止尝试过的代码;

result = find (idx2);

到目前为止没有运气,原始帧重置似乎没有调整标签大小,当我添加或删除数字时,框架(通过观看边框)也会调整大小。

我没有看到任何尺寸限制,我应该创建约束而不是通过改变框架来设置宽度吗?

还有其他提示吗?

感谢。

4 个答案:

答案 0 :(得分:0)

尝试将此属性添加到标签: - resultDigitsLabel.adjustsFontSizeToFitWidth = true

答案 1 :(得分:0)

您必须计算20位数或40位数的帧,并为该帧创建UILabel的帧。

let digits:NSString = "99999999999999999999" as NSString
let idealFrame= digits.boundingRect(with: CGSize(width: CGFloat.infinity, height: 30), options: .usesLineFragmentOrigin, attributes: [NSFontAttributeName:labelFont], context: nil).size

现在你可以在这个框架上制作UILabel了。

答案 2 :(得分:0)

约束是最好的方法。为您的Label提供588f2aded1902a1b08959145Leading约束,并为Trailing提供超级视图。 它将支持横向和纵向模式。

答案 3 :(得分:0)

根据上面的warri0r9,添加约束就可以了;

    let screenSize: CGRect = UIScreen.main.bounds;
    let screenWidth = screenSize.width;
    let constraintMargin = (screenWidth - labelSize.width) / 2;
    let leadingConstraint = NSLayoutConstraint(item: targetDigitsLabel, attribute: .leading, relatedBy: .equal, toItem: view, attribute: .leading, multiplier: 1, constant: constraintMargin);
    let trailingConstraint = NSLayoutConstraint(item: targetDigitsLabel, attribute: .trailing, relatedBy: .equal, toItem: view, attribute: .trailing, multiplier: 1, constant: constraintMargin * -1);
    view.addConstraints([leadingConstraint, trailingConstraint]);