2013-09-06 17 views
12

में पदावनत sizeWithFont:constrainedToSize:lineBreakMode: विधि iOS7 में पदावनत किया गया है, कैसे मैं अपने आप को गतिशील पाठ फिट करने के लिए अपनी ऊंचाई और चौड़ाई समायोजित करने के लिए एक UILabel आकार बदल सकते हैं?आकार UILabel lineBreakMode: iOS7

+1

निश्चित रूप से यह पता लगाने में रुचि रखते हैं। मैंने इसके बजाय बाउंडिंगरेक्ट का उपयोग करने की कोशिश की, लेकिन आप उपरोक्त के साथ की तरह बाधाओं को दर्ज नहीं कर सकते हैं। – Tim

+0

बाउंडिंग के साथ क्या गलत है RectWithSize: विकल्प: विशेषताएं: संदर्भ? – peko

+0

मुझे इसका दुरुपयोग करना होगा, मैं इसे एक और जाना दूंगा! – Tim

उत्तर

8

मैं इसका उपयोग समाप्त कर दिया। मेरे लिये कार्य करता है। यह IBOutlets ऑब्जेक्ट के साथ काम नहीं करता है, लेकिन जब आप Uitableview की ऊंचाई पर टेक्स्ट की गतिशीलता की गणना करते समय उपयोगी होते हैं ForRowAtIndexPath: विधि।

NSDictionary *attributesDictionary = [NSDictionary dictionaryWithObjectsAndKeys: 
                  [UIFont fontWithName:@"FontName" size:15], NSFontAttributeName, 
                  nil]; 

CGRect frame = [label.text boundingRectWithSize:CGSizeMake(263, 2000.0) 
                options:NSStringDrawingUsesLineFragmentOrigin 
                attributes:attributesDictionary 
                context:nil]; 

CGSize size = frame.size; 
+1

यह आईबीओलेट यूलाबेल – Tim

+0

के साथ बिल्कुल काम नहीं कर रहा है यह ऑटो-लेआउट के साथ "जैसा है" काम नहीं करेगा। यहां मेरा समाधान देखें: http://stackoverflow.com/a/18933978/557054 –

6

यह iOS6 और iOS7 में काम करना चाहिए, लेकिन अपने लेबल की कमी टूट जाएगा (आप उन सभी को वापस प्रोग्राम के यदि आवश्यक हो तो निर्धारित करने की आवश्यकता):

-(void)resizeHeightForLabel: (UILabel*)label { 
    label.numberOfLines = 0; 
    UIView *superview = label.superview; 
    [label removeFromSuperview]; 
    [label removeConstraints:label.constraints]; 
    CGRect labelFrame = label.frame; 
    if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7) { 
     CGRect expectedFrame = [label.text boundingRectWithSize:CGSizeMake(label.frame.size.width, 9999) 
                 options:NSStringDrawingUsesLineFragmentOrigin 
                attributes:[NSDictionary dictionaryWithObjectsAndKeys: 
                   label.font, NSFontAttributeName, 
                   nil] 
                 context:nil]; 
     labelFrame.size = expectedFrame.size; 
     labelFrame.size.height = ceil(labelFrame.size.height); //iOS7 is not rounding up to the nearest whole number 
    } else { 
#pragma GCC diagnostic ignored "-Wdeprecated-declarations" 
     labelFrame.size = [label.text sizeWithFont:label.font 
           constrainedToSize:CGSizeMake(label.frame.size.width, 9999) 
            lineBreakMode:label.lineBreakMode]; 
#pragma GCC diagnostic warning "-Wdeprecated-declarations" 
    } 
    label.frame = labelFrame; 
    [superview addSubview:label]; 
} 

अपने ViewController के लिए इस विधि जोड़ें और इसका इस्तेमाल करते हैं इस तरह:

[self resizeHeightForLabel:myLabel]; 
//set new constraints here if needed 
+1

यह एक जीवन बचतकर्ता है! इस समय के साथ गड़बड़ करने में मैंने कितना समय बिताया है, इस तरह की सरल समस्या जैसे मैं हल करने की कोशिश कर रहा हूं। –

+0

मैं इसका उपयोग कर रहा हूं, और यह लेबल को अच्छी तरह से आकार देता है, लेकिन जब लेबल पर्यवेक्षण में फिर से जोड़ा जाता है तो स्थिति गलत होती है, भले ही मैं यह सत्यापित कर सकूं कि मूल अभी भी फ्रेम –

+0

@PeteMartin पर सही ढंग से सेट है निश्चित रूप से पर्यवेक्षकों में से एक UITableViewCell या अन्य कैश किए गए UI तत्व नहीं है? उस मामले में कुछ कामकाज की जरूरत है। –