2015-04-15 8 views
13

यूआईएलएबल में प्रदर्शित होने पर मेरे ऐप पर लोड किए गए कुछ कस्टम फोंट काट दिया जा रहा है। मेरे पास कई कस्टम फोंट हैं जिन्हें मुझे सही तरीके से प्रदर्शित करने की आवश्यकता है। मैं इसे कैसे ठीक करूं?उइलाबेल कस्टम फ़ॉन्ट बंद कर देता है। मैं चयनित कस्टम फ़ॉन्ट के आधार पर गतिशील रूप से UILabel ऊंचाई को कैसे समायोजित करूं?

उत्तर

15

जैसा कि कहा गया है, मुझे एक बहुत ही परेशानी की समस्या थी, जहां के कारण UILabel में कस्टम फोंट काट दिया जाएगा। बाद में मुझे पता चला कि यह ascenders and descenders (फ़ॉन्ट विशेषताओं) के कारण था।

अधिक खोज के बाद मुझे solution मिला जो आपको एक प्रोग्राम डाउनलोड करने, फ़ॉन्ट के आरोही और टर्मिनल का उपयोग करके अवरोधक समायोजित करने की आवश्यकता है और फिर इसे सही होने तक अपने ऐप पर जांचें।

यह ठीक होगा अगर मुझे 20+ फ़ॉन्ट्स के लिए ऐसा करने की ज़रूरत नहीं है। तो मैंने चारों ओर खोदने का फैसला किया और देखा कि क्या मैं फ़ॉन्ट के आरोही और अवरोही मूल्यों तक पहुंच सकता हूं। यूफॉन्ट को उन सटीक विशेषताओं को बदल देता है!

उस जानकारी के साथ, मैं उइलाबेल को उपclass करने और ascendender और descender मूल्यों (पूर्ण मूल्य के रूप में यह नकारात्मक मान के रूप में) जोड़कर गतिशील रूप से अपने फ्रेम समायोजित करने में सक्षम था। UILabel में intrinsicContentSize संपत्ति ओवरराइड करने के लिए

UIFont *font = [UIFont fontWithName:nameOfFontUsed size:44.0]; 
NSDictionary *attrsDict = [NSDictionary dictionaryWithObject:font forKey:NSFontAttributeName]; 
NSMutableAttributedString *theString = [[NSMutableAttributedString alloc] initWithString:[NSString stringWithFormat:@"%@", enteredString] attributes:attrsDict]; 

//Add other attributes you desire 

NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init]; 
paragraphStyle.lineBreakMode = NSLineBreakByCharWrapping; 
paragraphStyle.lineHeightMultiple = 5.0; 
[theString addAttribute:NSParagraphStyleAttributeName value:paragraphStyle range:NSMakeRange(0, [theString length])]; 

[self setAttributedText:theString]; 

[self sizeToFit]; 

[self setFrame:CGRectMake(self.frame.origin.x, self.frame.origin.y, self.frame.size.width, self.frame.size.height+font.ascender+ABS(font.descender))]; 
+2

के लिए

उदाहरण मैं समझता हूँ कि आप UILabel subclassed। आपने किस विधि को ओवरराइड किया और उपर्युक्त कोड डाला? – mixtly87

+0

मेरा दिन बचाया! धन्यवाद। –

2

प्रयास करें:

यहाँ नीचे कार्यान्वयन कोड का एक टुकड़ा है, अंतिम पंक्ति पैसा रेखा है।

मुझे नहीं लगता कि यह सबसे अच्छा अभ्यास है, लेकिन कुछ मामलों में समस्या को हल करना आसान है। स्विफ्ट 3

class ExpandedLabel: UILabel { 

    override var intrinsicContentSize: CGSize { 

    let size = super.intrinsicContentSize 

    // you can change 'addedHeight' into any value you want. 
    let addedHeight = font.pointSize * 0.3 

    return CGSize(width: size.width, height: size.height + addedHeight) 
    } 
} 
संबंधित मुद्दे