Skip to content

Commit 25dcf5d

Browse files
committed
refactor: enhance font handling in NitroTextImpl
1 parent 7b30c14 commit 25dcf5d

1 file changed

Lines changed: 34 additions & 6 deletions

File tree

ios/NitroTextImpl+Font.swift

Lines changed: 34 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -47,21 +47,49 @@ extension NitroTextImpl {
4747

4848
var targetWeight = uiWeight
4949
var familyName = resolvedFamily
50-
var isCondensed = familyName == "SystemCondensed"
50+
let normalizedFamilyName = familyName.trimmingCharacters(in: .whitespacesAndNewlines).lowercased()
51+
let isSystemCondensed = normalizedFamilyName == "systemcondensed" || familyName == "SystemCondensed"
52+
var isCondensed = isSystemCondensed
5153
var didFindFont = false
5254
var base: UIFont? = nil
5355

54-
if familyName == Self.defaultFontFamily || familyName == "System" || familyName == "SystemCondensed" {
56+
let systemDesign: UIFontDescriptor.SystemDesign? = {
57+
switch normalizedFamilyName {
58+
case "system-ui", "system":
59+
return nil
60+
case "ui-serif":
61+
return .serif
62+
case "ui-rounded":
63+
return .rounded
64+
case "ui-monospace":
65+
return .monospaced
66+
default:
67+
return nil
68+
}
69+
}()
70+
71+
if familyName == Self.defaultFontFamily
72+
|| familyName == "System"
73+
|| familyName == "SystemCondensed"
74+
|| systemDesign != nil
75+
|| normalizedFamilyName == "system-ui"
76+
|| normalizedFamilyName == "system"
77+
{
5578
base = UIFont.systemFont(ofSize: finalPointSize, weight: targetWeight)
5679
didFindFont = true
5780

81+
var descriptor = base?.fontDescriptor
82+
if let design = systemDesign {
83+
descriptor = descriptor?.withDesign(design)
84+
}
5885
if isItalic || isCondensed {
59-
var traits = base?.fontDescriptor.symbolicTraits ?? []
86+
var traits = descriptor?.symbolicTraits ?? []
6087
if isItalic { traits.insert(.traitItalic) }
6188
if isCondensed { traits.insert(.traitCondensed) }
62-
if let descriptor = base?.fontDescriptor.withSymbolicTraits(traits) {
63-
base = UIFont(descriptor: descriptor, size: finalPointSize)
64-
}
89+
descriptor = descriptor?.withSymbolicTraits(traits)
90+
}
91+
if let descriptor = descriptor {
92+
base = UIFont(descriptor: descriptor, size: finalPointSize)
6593
}
6694
}
6795

0 commit comments

Comments
 (0)