Swift: 以编程方式使 UILabel 变粗而不改变其大小?
Swift: Programmatically make UILabel bold without changing its size?
我有一个以编程方式创建的 UILabel。我想在不指定字体大小的情况下将标签文本设为粗体。到目前为止我只发现:
UIFont.boldSystemFont(ofSize: CGFloat)
这正是我所拥有的:
let titleLabel = UILabel()
let fontSize: CGFloat = 26
titleLabel.font = UIFont.boldSystemFont(ofSize: titleLabelFontSize)
但是这样我也是在设置大小。我想避免这种情况。有办法吗?
如果没有办法,Swift有什么好的解决方法?
谢谢!
为什么不只是:
titleLabel.font = UIFont.boldSystemFont(ofSize: titleLabel.font.pointSize)
为了在不改变字体大小的情况下使字体变粗,您可以创建这样的扩展(基于答案 here:
extension UIFont {
func withTraits(traits:UIFontDescriptorSymbolicTraits...) -> UIFont {
let descriptor = self.fontDescriptor()
.fontDescriptorWithSymbolicTraits(UIFontDescriptorSymbolicTraits(traits))
return UIFont(descriptor: descriptor, size: 0)
}
func bold() -> UIFont {
return withTraits(.TraitBold)
}
}
所以你可以像这样使用它:
let titleLabel = UILabel()
titleLabel.font = titleLabel.font.bold() //no need to include size!
更新 Swift 4 语法:
extension UIFont {
func withTraits(traits:UIFontDescriptorSymbolicTraits...) -> UIFont {
let descriptor = self.fontDescriptor
.withSymbolicTraits(UIFontDescriptorSymbolicTraits(traits))
return UIFont(descriptor: descriptor!, size: 0)
}
func bold() -> UIFont {
return withTraits(traits: .traitBold)
}
}
我有一个以编程方式创建的 UILabel。我想在不指定字体大小的情况下将标签文本设为粗体。到目前为止我只发现:
UIFont.boldSystemFont(ofSize: CGFloat)
这正是我所拥有的:
let titleLabel = UILabel()
let fontSize: CGFloat = 26
titleLabel.font = UIFont.boldSystemFont(ofSize: titleLabelFontSize)
但是这样我也是在设置大小。我想避免这种情况。有办法吗?
如果没有办法,Swift有什么好的解决方法?
谢谢!
为什么不只是:
titleLabel.font = UIFont.boldSystemFont(ofSize: titleLabel.font.pointSize)
为了在不改变字体大小的情况下使字体变粗,您可以创建这样的扩展(基于答案 here:
extension UIFont {
func withTraits(traits:UIFontDescriptorSymbolicTraits...) -> UIFont {
let descriptor = self.fontDescriptor()
.fontDescriptorWithSymbolicTraits(UIFontDescriptorSymbolicTraits(traits))
return UIFont(descriptor: descriptor, size: 0)
}
func bold() -> UIFont {
return withTraits(.TraitBold)
}
}
所以你可以像这样使用它:
let titleLabel = UILabel()
titleLabel.font = titleLabel.font.bold() //no need to include size!
更新 Swift 4 语法:
extension UIFont {
func withTraits(traits:UIFontDescriptorSymbolicTraits...) -> UIFont {
let descriptor = self.fontDescriptor
.withSymbolicTraits(UIFontDescriptorSymbolicTraits(traits))
return UIFont(descriptor: descriptor!, size: 0)
}
func bold() -> UIFont {
return withTraits(traits: .traitBold)
}
}