Swash هو تجريد بسيط وآمن ومعبر عن UIFont مع دعم مخبوز للنوع الديناميكي.
لتحديد خط مخصص ، ما عليك سوى إنشاء تعداد String يتوافق مع بروتوكول Font .
enum Papyrus : String , Font {
case regular = " Papyrus "
case condensed = " Papyrus-Condensed "
}هذا كل ما تحتاجه لبدء استخدام خطك في مشروعك!
label . font = Papyrus . regular . of ( size : 17 ) يستخدم UIFontMetrics للتوسع. يخبر adjustsFontForContentSizeCategory true التسمية بتحديث الخط تلقائيًا عندما يغير المستخدم تفضيل حجم المحتوى الخاص به. راجع منشور المدونة لدينا للحصول على إرشادات حول اختيار الأحجام الافتراضية لأنماط النص ، أو فقط استخدم Swash's Provails التي تم سحبها من إرشادات الواجهة البشرية من 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. سيتعين عليك تحديث الخطوط يدويًا ، إما في traitCollectionDidChange(_:) أو عن طريق مراقبة ترميز UIContentSizeCategoryDidChange .
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 بقيمة 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 من أجل دعم Cascading Font. في حالة عدم دعم الخط الخاص بك شخصية مستخدمة في الملصق ، ستوفر هذه القائمة خطوط احتياطية للاستخدام.
enum Papyrus: String, Font {
case condensed = "Papyrus-Condensed"
case regular = "Papyrus"
var cascadeList: [CascadingFontProperties] {
[.init(Damascus.regular)]
}
}
البردي لا يدعم الشخصيات العربية. لذلك ، لقد قدمنا هنا دمشق كاحتياطي. إذا لم يتم توفير عائق ، فسيتم استخدام خط النظام للشخصيات غير المدعومة.
يمكن أن تحاول 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 ). وإلا فإن جميع الأطر الثلاثة (iOS و TVOS و WatchOS) ستتم إضافة.
Swash متاح تحت رخصة معهد ماساتشوستس للتكنولوجيا. انظر ملف الترخيص لمزيد من المعلومات.