【问题标题】:Adjust UILabel font size without .adjustsFontForContentSizeCategory调整不带 .adjustsFontForContentSizeCategory 的 UILabel 字体大小
【发布时间】:2017-06-05 15:15:20
【问题描述】:

我有两个 UILabel,我需要调整字体大小以正确适应文本(即在更小、更旧的设备中)。

这可以通过.adjustsFontSizeToFitWidth 属性轻松解决,但问题是,由于UILabels 彼此靠近并传达相似的信息,我希望它们具有相同的字体大小(并且adjustsFontSizeToFitWidth 将调整它们独立)。

所以,我想做的是,以某种方式(这是我需要帮助的地方)计算两个标签的字体大小需要是多少,并在两者上使用最小的。

关于如何做到这一点的任何想法?两个标签都是多行的(2 行),并且它们始终具有相同的大小。

提前致谢。

【问题讨论】:

  • 发布截图。
  • 你知道正手这两者中哪一个需要最小的字体吗?这样会更容易
  • @AdilSoomro 这里是imgur.com/a/5KShO
  • @Eric 我会给用户自定义屏幕的机会,所以我无法知道哪个更大:/
  • 好吧,我改了答案,现在应该可以编译了

标签: ios swift cocoa-touch uilabel


【解决方案1】:

你可以做什么让 .adjustsFontSizeToFitWidth 属性为真,获取最小的字体,然后比较两个宽度并将两者的宽度设置为最小的一个。伪代码示例:

.adjustsFontSizeToFitWidth = true
var fontSizeOne = labelOne.fontSize
var fontSizeTwo = labelTwo.fontSize

if(fontSizeOne < fontSizeTwo)
  {
    labelTwo.fontSize = labelOne.fontSize
  }
else
  {
    labelOne.fontSize = labelTwo.fontSize
  }

【讨论】:

  • 最初我是这么想的,但看起来 fontSize 属性保持不变,尽管字体大小发生了任何变化!
【解决方案2】:

您可以使用min 函数使@Will 的答案变得更短:

    labelOne.adjustsFontSizeToFitWidth = true 
    labelTwo.adjustFontSizeToFitWidth = true

    var fontSizeOne = labelOne.font.pointSize
    var fontSizeTwo = labelTwo.font.pointSize

    var min = min(fontSizeOne, fontSizeTwo)
    labelOne.font = UIFont.systemFont(ofSize: min))
    labelTwo.font = labelOne.font

【讨论】:

  • 首先感谢 Eric 的回复!然而这并没有奏效。正如我所怀疑的,尽管尺寸发生了视觉变化,但 pointSize 仍然保持不变。
  • fontSizeOne: 20.0 fontSizeTwo: 20.0
  • 实际字体大小好像很难得到,也许this stack-overflow post可以帮到你?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-09
  • 1970-01-01
  • 2015-10-08
相关资源
最近更新 更多