根据文本自动更改标签大小

时间:2014-11-15 19:22:06

标签: ios xcode swift size frame

我有一个标签,我想调整它的外观。我希望它位于屏幕的中心,并且内部文本需要尽可能宽。所以我的目标是手动更改代码中的文本,但宽度应根据文本的长度自行更改。有没有办法呢?

我尝试了以下但是没有用......

MessageLabel.frame = CGRectMake(self.view.center.x, self.view.center.y, self.frame.size.width, self.frame.size.height)

但第一部分确实有效,因为我通过更改width& height对某些数字:

MessageLabel.frame = CGRectMake(self.view.center.x, self.view.center.y, 100, 30)

提前感谢:)

2 个答案:

答案 0 :(得分:0)

您可以使用自动布局来实现此目的。您只需要两个约束来在屏幕上居中标签。您可以将其放入viewDidLoad()以下是代码:

let centerXConstraint = NSLayoutConstraint(item: MessageLabel, attribute: .CenterX, relatedBy: .Equal, toItem: self.view, attribute: .CenterX, multiplier: 1.0, constant: 0.0)
let centerYConstraint = NSLayoutConstraint(item: MessageLabel, attribute: .CenterY, relatedBy: .Equal, toItem: self.view, attribute: .CenterY, multiplier: 1.0, constant: 0.0)

self.view.addConstraints([centerXConstraint, centerYConstraint])

编辑:你也需要用同样的方法调用它:

MessageLabel.setTranslatesAutoresizingMaskIntoConstraints(false)

答案 1 :(得分:0)

因为听起来你想以编程方式添加标签,所以我这样做是为了计算给定固定宽度的标签的高度。我知道你说你想要相反,所以我更新了下面的代码,以获得高度的论证。

func getStringSize(str: String, containerHeight: CGFloat) -> CGRect {

        var thisStr:NSString = str

        var boundingBox = thisStr.boundingRectWithSize(
            CGSizeMake(
                CGFloat(MAXFLOAT),
                containerHeight
            ),
            options: NSStringDrawingOptions.UsesLineFragmentOrigin, attributes: nil, context: nil
        )

        return boundingBox
    }

所以,要看到它的实际效果,你可以通过以下方式获得宽度:

var labelWidth: CGFloat = getStringSize("Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris posuere ipsum urna, quis pharetra.", 300px).bounds.width

然后,您可以使用已知的所有变量(宽度,高度,x,y)创建标签。

有意义吗?