Ios 使UILabel自动将字体大小调整为屏幕宽度,而不是文本长度
在一个非常简单的单屏幕应用程序中,我有一个从屏幕左边缘到右边缘的单行UILabel。 标签的文本在运行时动态更新。文本的长度各不相同,因为它包含一个范围为0…100的数字,我既不使用单间距字体,也不使用前导零 下面是一个例子:Ios 使UILabel自动将字体大小调整为屏幕宽度,而不是文本长度,ios,xcode,autolayout,interface-builder,Ios,Xcode,Autolayout,Interface Builder,在一个非常简单的单屏幕应用程序中,我有一个从屏幕左边缘到右边缘的单行UILabel。 标签的文本在运行时动态更新。文本的长度各不相同,因为它包含一个范围为0…100的数字,我既不使用单间距字体,也不使用前导零 下面是一个例子: |<--------- Screen width --------------->| |<----- UILabel "Some value = 0" ------->| |<----- UILabel "Some
|<--------- Screen width --------------->|
|<----- UILabel "Some value = 0" ------->|
|<----- UILabel "Some value = 50" ------>|
|<----- UILabel "Some value = 100" ----->|
||
||
||
||
我希望标签始终使用任何设备的最大宽度(即屏幕大小)。这可以通过使用自动布局、适当的前导和尾随约束、大字体和标签的“自动收缩”属性来实现
问题是,这种方法会使字体大小根据显示的值而变化,这不是我想要的。它应该只随屏幕的宽度而变化,而不随标签文本的长度而变化
在上面的示例中,大字体大小将用于值0,中字体大小将用于值50,小字体大小将用于值100。我想让它调整到最坏的情况(100),并使用任何文本后产生的大小
是否可以仅使用界面生成器属性和自动布局约束来实现这一点
我可以想到如何在代码中计算大小,但我认为一定有一种更简单的方法。在interface builder中不能将字体大小表示为视图宽度的一部分,但在代码中可以很容易地做到:
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
let textSize = Constant.baseFontSize * bounds.size.width / Constant.baseViewWidth
label.font = .systemFont(ofSize: textSize)
}