【问题标题】:auto-change size of label depending on text根据文本自动更改标签大小
【发布时间】:2014-11-15 19:22:06
【问题描述】:

我有一个标签,我想调整它的外观。我希望它位于屏幕的中心,并且与里面的文本一样宽。所以我的目标是手动更改代码中的文本,但宽度应根据文本的长度自行更改。有办法吗?

我尝试了以下方法,但没有成功...

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

但第一部分确实有效,我通过将 widthheight 更改为一些数字来检查:

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

提前感谢:)

【问题讨论】:

  • 您必须固定标签的宽度或高度才能计算另一个。例如,如果我想动态创建一个 UILabel 并输入“Lorem ipsum dolor sit amet, consectetur adipiscing elit”的文本。我可以调用一个辅助函数来计算这个标签的高度,因为我希望它是 200px 宽。或者我的助手可以计算宽度,因为我希望标签的高度最多为 300 像素。你必须知道其中之一。
  • 好的,让我来修正高度。你能告诉我一些如何让宽度动态变化的代码吗? @亚历克斯
  • 在下面发布了一些代码...

标签: ios xcode swift size frame


【解决方案1】:

您可以使用自动布局来实现这一点。您只需要两个约束即可在屏幕上居中标签。你可以把这个放在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)

【讨论】:

    【解决方案2】:

    因为听起来您想以编程方式添加标签,所以我在给定宽度的情况下计算标签的高度。我知道你说你想要相反,所以我更新了下面的代码以接受高度参数。

    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)创建标签。

    有意义吗?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多