Created
October 19, 2022 13:12
-
-
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.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// 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