【问题标题】:How to properly get the width of a string in Swift iOS8?如何在 Swift iOS8 中正确获取字符串的宽度?
【发布时间】:2016-03-08 16:12:13
【问题描述】:

我已经阅读了许多关于此的 SO 帖子,但找不到任何有效的方法。

我的代码:

let englishTextSize    = englishString.sizeWithAttributes([NSFontAttributeName: UIFont.systemFontOfSize(14)])
let englishLabel       = UILabel(frame: CGRectMake(self.view.center.x, 150, englishTextSize.width, englishTextSize.height))

这段代码 sn-p 会在我的文本周围产生一个省略号,从而避免宽度不够大。

文本本身使用了很多晦涩的字符,例如:

svarūpe-'vasthānam

但我无法想象会丢掉那么多。对 Swift 或 Obj-C 中的任何技巧开放,但最好是 Swift!

【问题讨论】:

  • 为什么不使用 sizeToFit 让它完美调整然后设置它的中心呢?
  • @Eiko 听起来很有希望!我第一次听说这个。我刚刚进入 swift dev 一周。愿意分享一个例子吗?
  • 我在下面的 Swift 中给出了一个例子——也许你需要调整一两件事。也许标签是 xib 或故事板文件的出口;但你应该明白这一点。 :)

标签: objective-c iphone swift ios8


【解决方案1】:

你的代码可以这么简单:

let englishLabel = UILabel(CGRectZero)
label.text = englishString
label.sizeToFit()
label.center = CGPointMake(self.view.center.x, 150)

【讨论】:

  • 这个 sn-p 确实看起来很棒。但是当添加这个时,根本不会出现任何文字。
  • 啊,我明白这是怎么回事了。我认为我的文字只是在我进行更新后显示在其他地方。这才是真正的答案。非常感谢!
  • 只是一个小的跟进.. 但是当我做 CGRectZero.. FitToSize() 似乎不尊重其容器框架的宽度。所以文本(多行)只是从右侧流血。但是如果我设置一个 CGRectMake,那么我可以明确地说 self.view.frame.size.width - 40 。有什么我遗漏的东西也是为 UILabel 定义框架边界的简单方法吗?还是应该将宽度设置为附加属性?
  • 首先,尺寸测量不匹配是不寻常的......你确定你使用的是相同的字体吗?有一些给定范围的测量方法,但这取决于你的方法。也许您应该让自动布局来完成这项工作,但这超出了这个问题的范围。
【解决方案2】:

依赖于属性

let englishTextSize = englishString.sizeWithAttributes([NSFontAttributeName: UIFont.systemFontOfSize(14)])
let englishLabel = UILabel(frame: CGRectMake(self.view.center.x, 150, englishTextSize.width, englishTextSize.height))

print(englishLabel.text.sizeWithAttributes(orderAttributes).width)

【讨论】:

  • 这基本上和我上面写的完全一样,只是你打印的是我的非工作宽度的结果。
  • 确保您的 englishString 不为空,否则我不明白为什么它不起作用
【解决方案3】:

下面的代码非常适合我。希望它也能帮助你......

    let name = "Statue of liberty"
    let size = (name as NSString).size(attributes: [NSFontAttributeName: UIFont.systemFont(ofSize: 14)])

【讨论】:

    【解决方案4】:

    无需自己计算宽度。您可以使用sizeToFit 使宽度和高度适合文本,然后将框架更改为您想要的高度和原点。

    类似:

    [englishLabel sizeToFit];
    [parentView addSubview:englishLabel];
    englishLabel.center = [parentView convertPoint:parentView.center
                                      fromView:parentView.superview];
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-11-04
      • 2013-05-12
      • 1970-01-01
      • 2021-12-10
      • 2011-04-07
      • 1970-01-01
      • 2019-04-18
      相关资源
      最近更新 更多