Skip to content

Instantly share code, notes, and snippets.

@yucelokan
Created October 19, 2022 13:12
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save yucelokan/2b5f8c39a35256d6f915ddf25265c516 to your computer and use it in GitHub Desktop.
Save yucelokan/2b5f8c39a35256d6f915ddf25265c516 to your computer and use it in GitHub Desktop.
A hack that modifies the values for UIFont read-only properties ascender and descender.
// A hack that modifies the values for UIFont read-only properties ascender and descender.
// Usage: UIFont.manipulateFont()
extension UIFont {
static func manipulateFont() {
swizzleFont()
}
static func swizzleFont() {
method_exchangeImplementations(
class_getInstanceMethod(self, #selector(getter: descender))!,
class_getInstanceMethod(self, #selector(getter: swizzledDescender))!
)
method_exchangeImplementations(
class_getInstanceMethod(self, #selector(getter: ascender))!,
class_getInstanceMethod(self, #selector(getter: swizzledAscender))!
)
}
private var isHelvetica: Bool { // modify this property for your font
fontName.contains("Helvetica")
}
@objc private var swizzledDescender: CGFloat {
if isHelvetica {
return self.swizzledDescender * 1.05
} else {
return self.swizzledDescender
}
}
@objc private var swizzledAscender: CGFloat {
if isHelvetica {
return self.swizzledAscender * 0.95
} else {
return self.swizzledAscender
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment