ios - 使 UILabel 自动调整字体大小以适应屏幕宽度,但不适应文本长度

标签 ios xcode autolayout interface-builder

在一个非常简单的单屏应用程序中,我有一个从屏幕左边缘到右边缘的单行 UILabel。 标签的文本在运行时动态更新。文本的长度各不相同,因为它包含 0...100 范围内的数字,并且我既没有使用等宽字体,也没有使用前导零。

这是一个例子:

    |<--------- Screen width --------------->|

    |<----- UILabel "Some value = 0" ------->|

    |<----- UILabel "Some value = 50" ------>|

    |<----- UILabel "Some value = 100" ----->|

我希望标签始终使用任何设备的最大宽度(即屏幕尺寸)。这可以通过使用自动布局、合适的前导和尾随约束、大字体大小以及标签的“自动收缩”属性来实现。

问题是,这种方法会使字体大小也根据显示的值而变化,这不是我想要的。它应该只随着屏幕的宽度而变化,而不随着标签文本的长度而变化。

在上面的示例中,大字体大小将用于值 0,中字体大小用于 50,小字体大小用于 100。我希望它调整到最坏情况 (100) 并使用结果大小对于之后的任何文本。

是否可以仅使用 Interface-Builder 属性和自动布局约束来实现此目的?

我可以想出如何在代码中计算大小的方法,但我认为必须有一种更简单的方法。

最佳答案

您无法在界面生成器中将字体大小表示为 View 宽度的比例,但您可以在代码中非常轻松地做到这一点:

  override func viewDidLayoutSubviews() {
    super.viewDidLayoutSubviews()
    let textSize = Constant.baseFontSize * bounds.size.width / Constant.baseViewWidth
    label.font = .systemFont(ofSize: textSize)
  }

关于ios - 使 UILabel 自动调整字体大小以适应屏幕宽度,但不适应文本长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58917863/

相关文章:

iphone - MPMoviePlayerViewController 立即关闭

ios - NSInvalidArgumentException',原因 : 'Resource count cannot be found in the main bundle'

iphone - 在 iPad 上选择图像

iOS 自动布局 - 当您想将 View 拉伸(stretch)到其父级的完整尺寸时,正确的方法是什么?

ios - 强制所有 UIKit 的东西在主线程中完成

ios - View 未显示在 iPhone 模拟器上,但显示在实际设备上

ios - Xcode 5,如何在所示场景中使用带有方向的自动布局?

ios - 这里的角落工作但阴影在 iOS 9 和 10 中不起作用

ios - Phonegap + iphone 6 屏幕尺寸问题

xcode - 在 Swift 中将数据转发到目标 VC(带框架)?