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/

相关文章:

ios - 在 Xcode 4 中编译时出现错误消息

ios - 使用 xmpp 和 openfire 向用户发送好友请求

ios - 我想记住一个(NSIndexPath *)indexPath以便以后删除,但是崩溃了

iphone - iPhone应用程式的位置服务

ios - Xcode/IB - 自动布局、多个容器 View 和 ScrollView

ios - WatchKit 拉动刷新

ios - 适用于 iOS 的 Google Plus API : Share function - Crash app when touching "Public" in the native dialog share?

ios - 在XCode中删除与ios项目关联的svn存储库

ios - 在 textFieldDidBeginEditing 方法中更新约束会导致文本反弹

ios - Xcode Auto Layout 不断改变我的布局