如何强制UILabel绘制大写字母的文本?

34

如何强制UILabel使用大写字母绘制文本?


要么你真正想问的没有表达清楚,要么你没有做足够的研究。 - David Rönnqvist
2
我希望能找到类似字体样式的东西。 - Dmitry
6个回答

61

Objective-C

NSString *text = @"Hello";
[myLabel setText:[text uppercaseString]];

Swift 3 和 Swift 4

let text = "Hello"
myLabel.text = text.uppercased()

14
请注意,这并不总是适合VoiceOver的("ADD ITEM"将被读作"A.D.D. item"),因此也许值得将accessibilityLabel设置为非大写版本。 - Blixt
@Blixt:为什么VoiceOver在“add”上会执行每个字母,但不在“item”上执行?我没有复现这个问题。 - Arcank
@Arcank 我不确定逻辑是什么,但“ADD”是一个有效的常见缩写词(注意力缺陷障碍),而“ITEM”则不是,所以可能是这个原因。否则,更通用的启发式方法是将1-3个大写字母作为缩略语读出来,以捕捉大多数常见情况(BMW、ID、FAQ、AR、VR、SAT等等),但对于较长的单词则不要缩写,因为它们可能只是一个大写单词。 - Blixt
有趣!感谢提供详细信息。 - Arcank
为什么这是一个被接受的答案?它只是将字符串大写,而不是强制标签文本大写。每次设置文本时,您需要调用text.uppercased()。 - Zaporozhchenko Oleksandr

22
您曾询问是否有一种在iOS中的属性文本中与CSS声明“text-transform:uppercase;”等价的方法。不幸的是,这是不可用的,我认为添加此属性会很方便。
我个人曾建立了UILabel的子类,并添加了一个名为“uppercase”的布尔类型的属性。我重写了文本设置器,如果“uppercase”被设置为true,则它将自动调用“uppercaseString”对新值进行转换。请注意,这种方法仍需要以编程方式实现。

21

这是Swift 3和Swift 4版本:

titleLabel.text = titleLabel.text?.uppercased()

8
如果您希望在Swift中将字符串强制显示为所有大写字符,则以下是我使用的代码,对我非常有效。
titleLabel.text = youStringVariable.uppercaseString 

4
一个快速浏览文档可能比较快。
NSString *upperCase = [string uppercaseString];

0

不必将文本更改为大写,您可以使用大写/小型大写字体。

titleLabel.font = .smallCapsSystemFont(ofSize: 17, weight: semibold)

extension UIFont {
    
  static func smallCapsSystemFont(ofSize size: CGFloat, weight: Weight) -> UIFont { 
    // Upper case letters are in small caps
    let upperCaseFeature: [UIFontDescriptor.FeatureKey: Int] = [
      .type: kUpperCaseType,
      .selector: kUpperCaseSmallCapsSelector
    ]

    // Lower case letters are in small caps
    let lowerCaseFeature: [UIFontDescriptor.FeatureKey: Int] = [
      .type: kLowerCaseType,
      .selector: kLowerCaseSmallCapsSelector
    ]

    let features = [upperCaseFeature, lowerCaseFeature]
    let descriptor = UIFont.systemFont(ofSize: size, weight: weight)
      .fontDescriptor
      .addingAttributes([.featureSettings: features])

    return UIFont(descriptor: descriptor, size: size)
  }
}

这与仅将所有字符大写不同,需要增加UIFont的大小,从而增加UILabel的高度。 - Roman Filippov

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接