我有一个标签,我想调整它的外观。我希望它位于屏幕的中心,并且内部文本需要尽可能宽。所以我的目标是手动更改代码中的文本,但宽度应根据文本的长度自行更改。有没有办法呢?
我尝试了以下但是没有用......
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)
提前感谢:)
答案 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)创建标签。
有意义吗?