Swash เป็นสิ่งที่เป็นนามธรรมที่เรียบง่ายปลอดภัยและแสดงออกของ UIFont ด้วยการสนับสนุนแบบอบสำหรับประเภทไดนามิก
ในการกำหนดตัวอักษรที่กำหนดเองเพียงสร้าง enum String ที่สอดคล้องกับโปรโตคอล Font
enum Papyrus : String , Font {
case regular = " Papyrus "
case condensed = " Papyrus-Condensed "
}นั่นคือทั้งหมดที่คุณต้องเริ่มใช้แบบอักษรในโครงการของคุณ!
label . font = Papyrus . regular . of ( size : 17 ) ใช้ UIFontMetrics สำหรับการปรับขนาด การตั้งค่า adjustsFontForContentSizeCategory เป็น true จะบอกฉลากให้อัปเดตแบบอักษรโดยอัตโนมัติเมื่อผู้ใช้เปลี่ยนการตั้งค่าขนาดเนื้อหาของพวกเขา ดูโพสต์บล็อกของเราสำหรับคำแนะนำเกี่ยวกับการเลือกขนาดเริ่มต้นสำหรับรูปแบบข้อความหรือเพียงแค่ใช้ค่าเริ่มต้นของ Swash ที่ดึงมาจากแนวทางส่วนต่อประสานมนุษย์ของ Apple สำหรับ iOS, WatchOs และ TVOS
label1 . adjustsFontForContentSizeCategory = true
label2 . adjustsFontForContentSizeCategory = true
label1 . font = Papyrus . condensed . of ( textStyle : . headline )
// Optional size cutoff and default size.
label2 . font = GillSans . bold . of ( textStyle : . title1 , defaultSize : 28 , maxSize : 38 ) ใช้การปรับสเกลของระบบไม่มีค่าขนาดเริ่มต้น adjustsFontForContentSizeCategory ต้องใช้ UIFontMetrics ดังนั้นจึงไม่มีประโยชน์สำหรับแบบอักษรที่กำหนดเองก่อน iOS 11 คุณจะต้องอัปเดตแบบอักษรด้วยตนเองไม่ว่าจะเป็นใน UIContentSizeCategoryDidChange traitCollectionDidChange(_:)
label . font = Papyrus . condensed . of ( style : . headline )
// Optional size cutoff
label . font = GillSans . bold . of ( style : . title1 , maxSize : 30 ) คุณสามารถใช้ SystemFont เพื่อรองรับประเภทแบบไดนามิกสำหรับน้ำหนักที่แตกต่างกันและรวมกันเป็นแบบอักษรไวยากรณ์ในโครงการของคุณ
label1 . font = SystemFont . light . of ( size : 17 )
label2 . adjustsFontForContentSizeCategory = true
label2 . font = SystemFont . preferred . of ( textStyle : . body )
label3 . font = SystemFont . semiboldItalic . of ( textStyle : . body , maxSize : 30 ) หมายเหตุสำคัญ: adjustsFontForContentSizeCategory ทำงานกับ SystemFont สำหรับน้ำหนัก preferred ด้วยค่า NIL maxSize เท่านั้น ในกรณีอื่น ๆ คุณจะต้องอัปเดตตัวอักษรทั้งใน traitCollectionDidChange(_:) หรือโดยการสังเกตการแจ้งเตือน UIContentSizeCategoryDidChange นี่เป็นเพราะน้ำหนัก preferred ส่งคืนผลลัพธ์ของ UIFont.preferredFont(forTextStyle:)
คุณสามารถใช้คุณสมบัติ boldTextMapping บน Font ใด ๆ เพื่อรองรับการตั้งค่าอุปกรณ์ "ข้อความตัวหนา" บน iOS และ TVOS
var boldTextMapping: MyFont {
switch self {
case .regular: return .bold
case .bold: return .black
case .black: return self
}
}
ตอนนี้ทุกอินสแตนซ์ MyFont ปกติจะกลายเป็นตัวหนาหากผู้ใช้มี "ข้อความตัวหนา" เปิดอยู่ในการตั้งค่าอุปกรณ์ของพวกเขา
หากคุณต้องการคุณสามารถสังเกต UIAccessibility.boldTextStatusDidChangeNotification ผ่าน NotificationCenter และตั้งค่าฟอนต์ของคุณเมื่ออัปเดต
คุณสามารถใช้คุณสมบัติ cascadeList แบบคงที่บน Font ใด ๆ เพื่อรองรับการเรียงลำดับแบบอักษร ในกรณีที่ตัวอักษรของคุณไม่รองรับอักขระที่ใช้ในฉลากรายการนี้จะให้แบบอักษรทางเลือกที่จะใช้
enum Papyrus: String, Font {
case condensed = "Papyrus-Condensed"
case regular = "Papyrus"
var cascadeList: [CascadingFontProperties] {
[.init(Damascus.regular)]
}
}
Papyrus ไม่สนับสนุนตัวละครอาหรับ ดังนั้นที่นี่เราได้จัดให้ดามัสกัสเป็นทางเสีย หากไม่มีการเลือกทางเลือกจะใช้ตัวอักษรของระบบสำหรับอักขระที่ไม่ได้รับการสนับสนุน
Swash สามารถพยายามบันทึกแผ่นหม้อต้มแบบอักษรให้คุณได้!
Swash . logBoilerplate ( forFontsWithFamilyNamesContaining : " gill " )เอาท์พุท:
enum GillSans: String, Font {
case GillSans-Italic = "GillSans-Italic"
case GillSans-SemiBold = "GillSans-SemiBold"
case GillSans-UltraBold = "GillSans-UltraBold"
case GillSans-Light = "GillSans-Light"
case GillSans-Bold = "GillSans-Bold"
case GillSans = "GillSans"
case GillSans-SemiBoldItalic = "GillSans-SemiBoldItalic"
case GillSans-BoldItalic = "GillSans-BoldItalic"
case GillSans-LightItalic = "GillSans-LightItalic"
}
เพียงแค่คัดลอกเอาต์พุตลงในโครงการของคุณ คุณอาจยังต้องใช้ชื่อแพทย์ชื่อเล็กน้อย
หากแบบอักษรที่กำหนดเองของคุณไม่สามารถเริ่มต้นได้ assertionFailure(_:file:line:) เรียกว่า สิ่งนี้จะขัดข้องดีบั๊กสร้างด้วยชุดการเพิ่มประสิทธิภาพคอมไพเลอร์ -Onone เริ่มต้น นี่คือการช่วยระบุการเริ่มต้นแบบอักษรที่ล้มเหลวซึ่งอาจเป็นเรื่องยากที่จะจับได้ การเปิดตัวสร้างด้วยระดับการเพิ่มประสิทธิภาพที่สูงขึ้นจะไม่เกิดการผิดพลาด ดังนั้นคุณไม่ต้องกังวลเกี่ยวกับแอปของคุณที่ล้มเหลวในการผลิตผ่านตัวอักษรโง่ ๆ
pod 'Swash' github "Mindgrub/Swash"
ตรวจสอบให้แน่ใจว่าได้ระบุแพลตฟอร์มของคุณเมื่อคุณอัปเดต (เช่น carthage update --platform iOS ) มิฉะนั้นจะมีการเพิ่มเฟรมเวิร์กทั้ง 3 เฟรม (iOS, TVOS และ WatchOS)
Swash สามารถใช้ได้ภายใต้ใบอนุญาต MIT ดูไฟล์ใบอนุญาตสำหรับข้อมูลเพิ่มเติม