iOS
मन चाहा वर्ण
खोज…
कस्टम फोंट एम्बेड करना
कस्टम फ़ॉन्ट समर्थन
कस्टम फोंट का उपयोग करने के इच्छुक एप्लिकेशन अब उन फोंट को अपने एप्लिकेशन बंडल में शामिल कर सकते हैं और उन फोंट को सिस्टम के साथ पंजीकृत कर सकते हैं जिसमें उनकी Info.plist फ़ाइल में UIAppFonts कुंजी शामिल है। इस कुंजी का मान अनुप्रयोग के बंडल में फ़ॉन्ट फ़ाइलों की पहचान करने वाले स्ट्रिंग की एक सरणी है। जब सिस्टम कुंजी को देखता है, तो यह निर्दिष्ट फोंट को लोड करता है और उन्हें एप्लिकेशन को उपलब्ध कराता है।
एक बार जब फोंट Info.plist
में सेट हो जाता है, तो आप अपने कस्टम फोंट का उपयोग आईबी या प्रोग्रामिक रूप से किसी भी अन्य फॉन्ट के रूप में कर सकते हैं।
- अपने फ़ॉन्ट को Xcode सहायक फ़ाइल फ़ोल्डर में खींचें और छोड़ें। "लक्ष्य में जोड़ें" अनुभाग पर अपने एप्लिकेशन को चिह्नित करना न भूलें। इस क्षण से आप आईबी में इस फ़ॉन्ट का उपयोग कर सकते हैं और इसे फ़ॉन्ट फूस से चुन सकते हैं।
- इस फ़ॉन्ट को उपकरण पर उपलब्ध कराने के लिए,
Info.plist
खोलें औरFonts provided by application key
(UIAppFonts)Fonts provided by application key
जोड़ें। आइटम 0 कुंजी के मान के रूप में फ़ॉन्ट नाम जोड़ें। नोट: फ़ॉन्ट नाम आपके फ़ॉन्ट फ़ाइल नाम से भिन्न हो सकता है।
- नीचे दिए गए स्निपेट का उपयोग करके कस्टम जोड़ा गया फ़ॉन्ट नाम प्राप्त करें
[ स्विफ्ट 3 ]
for family in UIFont.familyNames {
print("\(family)")
for name in UIFont.fontNames(forFamilyName: family) {
print(" \(name)")
}
}
[ उद्देश्य - सी ]
for (NSString *familyName in [UIFont familyNames]){
NSLog(@"Family name: %@", familyName);
for (NSString *fontName in [UIFont fontNamesForFamilyName:familyName]) {
NSLog(@"--Font name: %@", fontName);
}
}
स्टोरीबोर्ड के साथ कस्टम फ़ॉन्ट्स
स्टोरीबोर्ड से UI घटकों के लिए कस्टम फ़ॉन्ट्स आसानी से स्टोरीबोर्ड और श्रेणियाँ में उपयोगकर्ता परिभाषित रनटाइम विशेषताओं के साथ प्राप्त किया जा सकता है।
फायदे इस प्रकार हैं,
- यूआई तत्व के लिए आउटलेट को परिभाषित करने की आवश्यकता नहीं है
- प्रोग्राम के लिए तत्वों को फ़ॉन्ट सेट करने की आवश्यकता नहीं है।
अनुसरण करने के लिए कदम
फ़ॉन्ट फ़ाइल: आवेदन बंडल के लिए फ़ॉन्ट फ़ाइल (.ttf) जोड़ें और Info.plist में फ़ॉन्ट के तहत फ़ॉन्ट इस में के रूप में आवेदन द्वारा प्रदान के लिए प्रविष्टि जोड़ने प्रलेखन कस्टम फोंट की।
श्रेणियाँ परिभाषित करें: UIKit + IBExtensions जैसी फाइल जोड़ें और यूआई तत्वों जैसे यूआईबेल, यूआईब्यूटॉन आदि के लिए श्रेणियां जोड़ें, जिसके लिए आप कस्टम फ़ॉन्ट सेट करना चाहते हैं। सभी श्रेणियों के पास एक प्रॉपर्टी होगी जिसे फॉन्टनेम कहा जाता है । यह बाद में कस्टम फ़ॉन्ट (चरण 4 में) सेट करने के लिए स्टोरीबोर्ड से उपयोग किया जाएगा।
UIKit + IBExtensions.h
#import <UIKit/UIKit.h>
//Category extension for UILabel
@interface UILabel (IBExtensions)
@property (nonatomic, copy) NSString *fontName;
@end
// Category extension for UITextField
@interface UITextField (IBExtensions)
@property (nonatomic, copy) NSString *fontName;
@end
// Category extension for UIButton
@interface UIButton (IBExtensions)
@property (nonatomic, copy) NSString *fontName;
@end
- गेटर्स एंड सेटर्स: प्रत्येक श्रेणी के लिए फ़ॉन्टनाम प्रॉपर्टी के लिए गेटर्स और सेटर्स को परिभाषित करें।
UIKit + IBExtensions.m
#import "UIKit+IBExtensions.h"
@implementation UILabel (IBExtensions)
- (NSString *)fontName {
return self.font.fontName;
}
- (void)setFontName:(NSString *)fontName {
self.font = [UIFont fontWithName:fontName size:self.font.pointSize];
}
@end
@implementation UITextField (IBExtensions)
- (NSString *)fontName {
return self.font.fontName;
}
- (void)setFontName:(NSString *)fontName {
self.font = [UIFont fontWithName:fontName size:self.font.pointSize];
}
@end
@implementation UIButton (IBExtensions)
- (NSString *)fontName {
return self.titleLabel.font.fontName;
}
- (void)setFontName:(NSString *)fontName{
self.titleLabel.font = [UIFont fontWithName:fontName size:self.titleLabel.font.pointSize];
}
@end
- स्टोरीबोर्ड में फ़ॉन्ट सेट करना: User Defined रनटाइम एट्रीब्यूट्स में एक प्रविष्टि जोड़ें। FontPame के रूप में keyPath और आपके कस्टम फॉन्ट का नाम जैसा कि स्ट्रिंग के प्रकार के रूप में दिखाया गया है।
यह ऐप चलाते समय आपके कस्टम फ़ॉन्ट को सेट करेगा।
टिप्पणियाँ:
- लाटो-रेग्युलर मेरे द्वारा उपयोग किए गए कस्टम फ़ॉन्ट है।
- बंडल में जोड़ी गई .ttf फ़ाइल में समान नाम का उपयोग स्टोरीबोर्ड में विस्तार के बिना किया जाना चाहिए।
- फ़ॉन्ट का आकार वैसा ही होगा जैसा कि यूआई तत्व के विशेषता निरीक्षक में परिभाषित किया गया है।
स्टोरीबोर्ड के भीतर नियंत्रण के लिए कस्टम फोंट लागू करना
निम्न उदाहरण दिखाता है कि नेविगेशन बार में कस्टम फोंट कैसे लागू किया जाए और इसमें Xcode में पाए जाने वाले कुछ विचित्र व्यवहारों के लिए फ़िक्सेस शामिल हैं। कोई भी कस्टम फोंट को किसी अन्य UIControls जैसे कि UILabels , UIButtons और अन्य पर लागू कर सकता है, ताकि कस्टम फॉन्ट को प्रोजेक्ट में जोड़े जाने के बाद विशेषता निरीक्षक द्वारा उपयोग किया जा सके। कृपया नीचे दिए गए नमूनों और वीडियो के बाहरी लिंक पर ध्यान दें।
- अपने नेविगेशन नियंत्रक के भीतर अपने नेविगेशन बार का चयन करें
- गुण निरीक्षक में शीर्षक फ़ॉन्ट बदलें
(नए फ़ॉन्ट को चुनने से पहले आपको नेविगेशन बार के लिए बार टिंट को टॉगल करने की आवश्यकता होगी)
नोट्स (कैविट्स)
सत्यापित है कि यह Xcode 7.1.1+ पर काम करता है। ( नीचे दिए गए नमूने देखें )
- फ़ॉन्ट प्रभावी होने से पहले आपको नेवी बार टिंट को टॉगल करने की आवश्यकता है (Xcode में बग की तरह प्रतीत होता है; आप इसे डिफ़ॉल्ट रूप से वापस स्विच कर सकते हैं और फ़ॉन्ट चिपक जाएगा)
- यदि आप एक सिस्टम फॉन्ट चुनते हैं ~ सुनिश्चित करें कि आकार 0.0 नहीं है (अन्यथा नए फॉन्ट को अनदेखा किया जाएगा)
- ऐसा लगता है कि कोई समस्या नहीं के साथ काम करता है जब केवल एक NavBar पदानुक्रम में है। ऐसा प्रतीत होता है कि समान स्टैक में द्वितीयक नवबंर को नजरअंदाज किया जाता है। (ध्यान दें कि यदि आप मास्टर नेविगेशन कंट्रोलर के नेबर को दिखाते हैं तो अन्य सभी कस्टम नेवर सेटिंग्स को अनदेखा कर दिया जाता है)।
गोच्च्स (deux)
इनमें से कुछ को दोहराया जाता है जिसका अर्थ है कि वे ध्यान देने योग्य हैं।
- कभी-कभी स्टोरीबोर्ड xml भ्रष्ट हो जाता है। इसके लिए आपको स्रोत कोड मोड के रूप में स्टोरीबोर्ड में संरचना की समीक्षा करने की आवश्यकता है (स्टोरीबोर्ड फ़ाइल पर क्लिक करें> इस रूप में खोलें ...)
- कुछ मामलों में उपयोगकर्ता परिभाषित रनटाइम विशेषता से जुड़े नेवीगेशन इट टैग को व्यू कंट्रोलर टैग के बजाय व्यू टैग के एक xml बच्चे के रूप में सेट किया गया था। यदि ऐसा है तो इसे उचित संचालन के लिए टैग के बीच से हटा दें।
- कस्टम फ़ॉन्ट का उपयोग किया जाता है यह सुनिश्चित करने के लिए NavBar टिंट को टॉगल करें।
- गतिशील फ़ॉन्ट शैली का उपयोग करते हुए फ़ॉन्ट के आकार पैरामीटर को सत्यापित करें
- दृश्य पदानुक्रम सेटिंग को ओवरराइड करेगा। ऐसा प्रतीत होता है कि प्रति स्टैक एक फ़ॉन्ट संभव है।
परिणाम
नमूने
- उन्नत परियोजना में कई फोंट दिखाते हुए वीडियो
- सरल स्रोत डाउनलोड
- उन्नत परियोजना डाउनलोड ~ कई NavBar फ़ॉन्ट्स और कस्टम फ़ॉन्ट समाधान दिखाता है
- एकाधिक फ़ॉन्ट और कस्टम फ़ॉन्ट दिखा रहा है
कस्टम फ़ॉन्ट्स को संभालना
नोट ~ एक अच्छा चेकलिस्ट क्रिस वेबसाइट के साथ कोड से पाया जा सकता है और आप नमूना डाउनलोड परियोजना देख सकते हैं।
यदि आपके पास अपना स्वयं का फ़ॉन्ट है और इसे अपने स्टोरीबोर्ड में उपयोग करना चाहते हैं, तो निम्नलिखित एसओ प्रश्न पर उत्तरों का एक सभ्य सेट है। एक उत्तर इन चरणों की पहचान करता है।
- आप कस्टम फ़ॉन्ट फ़ाइल (.ttf, .ttc) प्राप्त करें
- फ़ॉन्ट फ़ाइलों को अपने Xcode प्रोजेक्ट में आयात करें
- एप्लिकेशन- info.plist में, एप्लिकेशन द्वारा प्रदान की गई कुंजी नाम जोड़ें। यह एक सरणी प्रकार है, अपने सभी फ़ॉन्ट फ़ाइल नामों को सरणी में जोड़ें, ध्यान दें: फ़ाइल एक्सटेंशन सहित।
- स्टोरीबोर्ड में, नेविगेशनबार पर एट्रीब्यूट इंस्पेक्टर पर जाएं, फॉन्ट सेलेक्ट एरिया के राइट आइकन बटन पर क्लिक करें। पॉपअप पैनल में, फॉन्ट टू कस्टम चुनें, और आपमें से फॉन्ट नाम का परिवार चुनें।
कस्टम फ़ॉन्ट समाधान
तो Xcode स्वाभाविक रूप से ऐसा लगता है कि यह UINavigationItem पर कस्टम फ़ॉन्ट को संभाल सकता है लेकिन यह सुविधा अभी ठीक से अपडेट नहीं हो रही है (चयनित फ़ॉन्ट को अनदेखा किया गया है)।
इसे हल करने के लिए:
एक तरीका यह है कि स्टोरीबोर्ड का उपयोग करके और कोड की एक पंक्ति को ठीक करने के लिए: पहले व्यू कंट्रोलर को एक UIView (UIButton, UILabel, या कुछ अन्य UIView उपवर्ग जोड़ें) (नेविगेशन आइटम नहीं ... Xcode एक को भी करने की अनुमति नहीं दे रहा है उस)। नियंत्रण जोड़ने के बाद आप स्टोरीबोर्ड में फ़ॉन्ट को संशोधित कर सकते हैं और अपने व्यू कंट्रोलर के आउटलेट के रूप में एक संदर्भ जोड़ सकते हैं। बस उस दृश्य को UINavigationItem.titleView पर असाइन करें। यदि आवश्यक हो तो आप पाठ का नाम भी कोड में सेट कर सकते हैं। रिपोर्टेड बग (23600285)।
@IBOutlet var customFontTitleView: UIButton!
//Sometime later...
self.navigationItem.titleView = customFontTitleView
नोट - यह उदाहरण एसओ ( यहां ) पर पोस्ट किए गए उत्तर से लिया गया है।