2010-03-07 11 views
19

जब myLabel.adjustsFontSizeToFitWidth = YES, लेबल के लिए टेक्स्ट बहुत लंबा होने पर UILabel स्वचालित रूप से फ़ॉन्ट आकार को समायोजित करेगा। उदाहरण के लिए, यदि मेरा लेबल केवल 100px चौड़ा है, और मेरा टेक्स्ट वर्तमान फ़ॉन्ट आकार के साथ फिट होने में बहुत लंबा है, तो यह टेक्स्ट आकार को तब तक कम कर देगा जब तक पाठ लेबल में फ़िट न हो जाए।UILabel के फ़ॉन्ट आकार को कैसे समझें जब -justjustsFontSizeToFitWidth YES पर सेट है?

जब फ़ॉन्ट का आकार घट गया तो मुझे UILabel से वास्तविक प्रदर्शित फ़ॉन्ट आकार प्राप्त करने की आवश्यकता है। उदाहरण के लिए, मान लीजिए कि मेरा फ़ॉन्ट आकार वास्तव में 20 था, लेकिन यूलाबेल को इसे 10 तक कम करना पड़ा। जब मैं फ़ॉन्ट और फ़ॉन्ट आकार के लिए UILabel से पूछता हूं, तो मुझे अपना पुराना फ़ॉन्ट आकार (20) मिलता है, लेकिन प्रदर्शित नहीं होता (10)।

+0

इस सवाल के तहत जवाब में से कोई भी वास्तव में इस सवाल का जवाब पूछा जा रहा। निश्चित नहीं है कि यह मामला क्यों है, लेकिन यह है। भविष्य के पाठकों के लिए यहां एक वास्तविक उत्तर दिया गया है: https://stackoverflow.com/a/28285447/2057171 –

उत्तर

7

मुझे यकीन नहीं है कि यह पूरी तरह से सटीक है, लेकिन यह बहुत करीब होना चाहिए, उम्मीद है। यह खाते में कटा हुआ तार नहीं ले सकता है, या लेबल की ऊंचाई नहीं ले सकता है, लेकिन ऐसा कुछ है जो आप मैन्युअल रूप से करने में सक्षम हो सकते हैं।

विधि

- (CGSize)sizeWithFont:(UIFont *)font minFontSize:(CGFloat)minFontSize actualFontSize:(CGFloat *)actualFontSize forWidth:(CGFloat)width lineBreakMode:(UILineBreakMode)lineBreakMode

पाठ का आकार वापसी, और ध्यान दें यह भी इस्तेमाल किया वास्तविक फ़ॉन्ट आकार के लिए एक संदर्भ पैरामीटर है कि होगा।

+0

विस्तारित उत्तर यहां: http://stackoverflow.com/a/6141770/1804403 – Skotch

+3

यह विधि अब आईओएस 7 के तहत बहिष्कृत है। Http://stackoverflow.com/questions/19195541/how-to-calculate-actual-font-size-in-ios-7 – openfrog

+2

देखें जो फ़ॉन्ट आकार के लिए बाउंडिंग बॉक्स आकार भी वापस करेगा ... फ़ॉन्ट नहीं दिए गए बाउंडिंग बॉक्स आकार के लिए आकार। – jowie

2

यदि किसी को अभी भी उत्तर की आवश्यकता है। आईओएस 9 में आप वास्तविक फ़ॉन्ट आकार की गणना करने के लिए boundingRectWithSize:options:context: का उपयोग कर सकते हैं। ध्यान दें कि context.minimumScaleFactor काम करने के लिए स्केलिंग के लिए 0.0 नहीं होना चाहिए।

- (CGFloat)adjustedFontSizeForLabel:(UILabel *)label { 
    NSMutableAttributedString *text = [[NSMutableAttributedString alloc] initWithAttributedString:label.attributedText]; 
    [text setAttributes:@{NSFontAttributeName:label.font} range:NSMakeRange(0, text.length)]; 

    NSStringDrawingContext *context = [NSStringDrawingContext new]; 
    context.minimumScaleFactor = label.minimumScaleFactor; 
    [text boundingRectWithSize:label.frame.size options:NSStringDrawingUsesLineFragmentOrigin context:context]; 
    CGFloat adjustedFontSize = label.font.pointSize * context.actualScaleFactor; 

    return adjustedFontSize; 
} 
+3

यह विधि अभी भी मूल लौटाती है फ़ॉन्ट का आकार –

0

स्विफ्ट 3

override func viewDidLayoutSubviews() { 
    super.viewDidLayoutSubviews() 

    func adjustedFontSizeForLabel(_ label: UILabel) -> CGFloat { 
     let text: NSMutableAttributedString = NSMutableAttributedString(attributedString: label.attributedText!) 
     text.setAttributes([NSFontAttributeName: label.font], range: NSMakeRange(0, text.length)) 
     let context: NSStringDrawingContext = NSStringDrawingContext() 
     context.minimumScaleFactor = label.minimumScaleFactor 
     text.boundingRect(with: label.frame.size, options: NSStringDrawingOptions.usesLineFragmentOrigin, context: context) 
     let adjustedFontSize: CGFloat = label.font.pointSize * context.actualScaleFactor 
     return adjustedFontSize 
    } 

    print(adjustedFontSizeForLabel(yourLabel)) 
} 
+0

यह इंटरफ़ेस बिल्डर में परिभाषित एक ही आकार दिखाता है। –

1

एक पंक्ति का UILabel ठीक इस सरल उपाय काम करता है के लिए:

//myLabel - initial label 

UILabel *fullSizeLabel = [UILabel new]; 
fullSizeLabel.font = myLabel.font; 
fullSizeLabel.text = myLabel.text; 
[fullSizeLabel sizeToFit]; 

CGFloat actualFontSize = myLabel.font.pointSize * (myLabel.bounds.size.width/fullSizeLabel.bounds.size.width); 

//correct, if new font size bigger than initial 
actualFontSize = actualFontSize < myLabel.font.pointSize ? actualFontSize : myLabel.font.pointSize; 
संबंधित मुद्दे