ios - iPhone/iPad的UILabel如何设置粗体和斜体?

标签 ios objective-c swift uilabel uifont

如何在iPhone/iPad的UILabel上设置粗斜体? 我搜索了论坛,但没有任何帮助。谁能帮帮我?

最佳答案

不要尝试使用字体名称。使用字体描述符你不需要名字:

UILabel * label = [[UILabel alloc] init]; // use your label object instead of this
UIFontDescriptor * fontD = [label.font.fontDescriptor
            fontDescriptorWithSymbolicTraits:UIFontDescriptorTraitBold
                            | UIFontDescriptorTraitItalic];
label.font = [UIFont fontWithDescriptor:fontD size:0];

size:0 表示“保持大小不变​​”

使用 Swift 尝试以下扩展:

extension UIFont {

    func withTraits(traits:UIFontDescriptorSymbolicTraits...) -> UIFont {
        let descriptor = self.fontDescriptor()
            .fontDescriptorWithSymbolicTraits(UIFontDescriptorSymbolicTraits(traits))
        return UIFont(descriptor: descriptor, size: 0)
    }

    func boldItalic() -> UIFont {
        return withTraits(.TraitBold, .TraitItalic)
    }

}

那么你可以这样使用它:

myLabel.font = myLabel.font.boldItalic()

甚至添加其他特征,例如 Condensed:

myLabel.font = myLabel.font.withTraits(.TraitCondensed, .TraitBold, .TraitItalic)

Swift 4 更新:

extension UIFont {
  var bold: UIFont {
    return with(traits: .traitBold)
  } // bold

  var italic: UIFont {
    return with(traits: .traitItalic)
  } // italic

  var boldItalic: UIFont {
    return with(traits: [.traitBold, .traitItalic])
  } // boldItalic


  func with(traits: UIFontDescriptorSymbolicTraits) -> UIFont {
    guard let descriptor = self.fontDescriptor.withSymbolicTraits(traits) else {
      return self
    } // guard

    return UIFont(descriptor: descriptor, size: 0)
  } // with(traits:)
} // extension

如下使用:

myLabel.font = myLabel.font.bold

myLabel.font = myLabel.font.italic

myLabel.font = myLabel.font.with(traits: [ .traitBold, .traitCondensed ])

Swift 5 更新

extension UIFont {
    var bold: UIFont {
        return with(.traitBold)
    }

    var italic: UIFont {
        return with(.traitItalic)
    }

    var boldItalic: UIFont {
        return with([.traitBold, .traitItalic])
    }



    func with(_ traits: UIFontDescriptor.SymbolicTraits...) -> UIFont {
        guard let descriptor = self.fontDescriptor.withSymbolicTraits(UIFontDescriptor.SymbolicTraits(traits).union(self.fontDescriptor.symbolicTraits)) else {
            return self
        }
        return UIFont(descriptor: descriptor, size: 0)
    }

    func without(_ traits: UIFontDescriptor.SymbolicTraits...) -> UIFont {
        guard let descriptor = self.fontDescriptor.withSymbolicTraits(self.fontDescriptor.symbolicTraits.subtracting(UIFontDescriptor.SymbolicTraits(traits))) else {
            return self
        }
        return UIFont(descriptor: descriptor, size: 0)
    }
}

关于ios - iPhone/iPad的UILabel如何设置粗体和斜体?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4713236/

相关文章:

ios - 我可以在没有coredata的情况下使用icloud数据吗?

iphone - 如何使用 objective c 使 iPhone 进入静音模式开/关

ios - 如何在滑动时隐藏tableView? swift

ios - 如何在 iOS 中正确地将 NSDictionary 转换为 json 格式?

iphone - 线程与异步调用

ios - SpriteKit 为一个节点改变 SKAction

Objective-C:在命名变量时使用 _(下划线)

arrays - 我可以使用 UnsafePointer.withMemoryRebound 将 [UInt8] 重新映射到 [UInt16] 吗?

ios - 如何在整个世界地图 iOS Swift 上向 MKMapView 添加叠加层

ios - iOS Paypal SDK 的变化