2011-11-19 22 views
18

में अधिकतम लाइनों को सेट करें, मुझे यूलाबेल के साथ कुछ विशेष संरेखण करने की आवश्यकता है।uilabel

मैं चाहता हूं कि इसमें 1 से 3 लाइनें हों, जो भी सामग्री हो। वर्तमान में मैं इसे इस

label.font = [UIFont fontWithName:@"HelveticaNeue-Bold" size:14.0f]; 
label.backgroundColor = [UIColor clearColor]; 
label.numberOfLines = 0; 
label.lineBreakMode = UILineBreakModeWordWrap; 

label.frame = CGRectMake(114.0f, 88.0f, 187.0f, 0.0f); 
[label sizeToFit]; 

जो अच्छा काम करता है अगर पाठ नहीं बहुत लंबा है की तरह कुछ कर रहा हूँ। यदि स्ट्रिंग @"Hello World" की तरह कुछ है तो UILabel केवल 14 अंक ऊंचा है, यदि यह कुछ लंबा रास्ता है तो यह फैलता है।

अब मैं चाहता हूं कि पाठ को डिफ़ॉल्ट रूप से ... ट्रिपल डॉट्स जोड़ना चाहिए यदि पाठ तीन पंक्तियों के लिए बहुत लंबा हो, लेकिन शीर्ष पर सेटिंग के साथ यह चौथी पंक्ति तक फैली हुई है।

क्या किसी को यह पता है कि इसे कैसे प्राप्त किया जाए?

अगर कुछ अस्पष्ट है तो कृपया एक टिप्पणी छोड़ दें।

संपादित करें:
check out this sample application to view my problem (hopefully).

उत्तर

18
label.numberOfLines = 3; 
CGSize size = [label.text sizeWithFont:label.font 
        constrainedToSize:CGSizeMake(SOME_WIDTH, 
                3 * label.font.lineHeight) 
         lineBreakMode:UILineBreakModeWordWrap]; 
label.bounds = CGRectMake(0, 0, 
          size.width, 
          size.height); 
+0

अपेक्षित के रूप में काम करता है। फ्रेम को फ्रेम में बदल दिया और लाइन ब्रेक मोड बदल दिया। ने इसमें से एक श्रेणी बनाई है, यह जांचें: https://github.com/martinjuhasz/UILabel-maximumNumberOfLines – choise

+0

'UILineBreakModeWordWrap' को हटा दिया गया है। इसके बजाय 'NSLineBreakByWordWrapping' का उपयोग करें। https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/ApplicationKit/Classes/nsparagraphstyle_Class/Reference/Reference.html – Chiubaka

13

बस label.numberOfLines = 3; निर्धारित किया है।

यह कुछ हद तक गलत लेबल है, क्योंकि यह वास्तव में प्रदर्शित करने के लिए अधिकतम मात्रा में लाइन रखता है।

+0

हाँ, और – NJones

+0

अगर numberOfLines शून्य नहीं है, तो sizeToFit काम नहीं करेगा और मैं sizeToFit व्यवहार की जरूरत है, क्योंकि यह हमेशा तीन लाइनों नहीं होना चाहिए शून्य का अर्थ है 'आप की तरह के रूप में उपयोग के रूप में कई': मैं इस से अपनाया अगर इसे होने की आवश्यकता नहीं है तो उच्च। – choise

+0

मैंने आपके प्रश्न को गलत समझा, क्षमा करें – Gil

0

कॉल getStringSize। यह StringSize प्रकार का एक चर वापस करेगा और गतिशील रूप से लाइनों की संख्या तय करेगा।

struct StringSize { 

    int numberOfLine; 
    float height; 
    float width; 

}; 

typedef struct StringSize StringSize; 



+(StringSize)getStringSize:(NSString *)string ofWidth:(float)width FontSize:(id)font { 

    StringSize sizeForString; 

    if(string){ 
     CGSize size = CGSizeMake(width, 400.0f); 
     CGSize appStringSize = [string sizeWithFont:(UIFont *)font constrainedToSize:size  lineBreakMode:UILineBreakModeTailTruncation]; 
     CGSize sizeString = [string sizeWithFont:font];  

     sizeForString.width = appStringSize.width; 
     sizeForString.height = appStringSize.height; 
     sizeForString.numberOfLine = (int)(sizeForString.height/sizeString.height); 
    }else { 
     sizeForString.width = 0; 
     sizeForString.height = 0; 
     sizeForString.numberOfLine = 0; 
    } 

    return sizeForString; 
} 
2

मैंने सोचा कि मैं इसे आजमाइए होगा:

func heightForStringDrawing(myString: String, myFont:UIFont, myWidth:CGFloat) -> (CGFloat, Int) { 
    var tc = NSTextContainer(size: CGSize(width: myWidth, height:CGFloat(FLT_MAX))) 
    var ts = NSTextStorage(string: myString) 
    var lm = NSLayoutManager() 
    lm.addTextContainer(tc) 
    ts.addLayoutManager(lm) 
    ts.addAttribute(NSFontAttributeName, value: myFont, range: NSMakeRange(0, ts.length)) 
    tc.lineFragmentPadding = 0.0 
    lm.glyphRangeForTextContainer(tc) 
    let height = lm.usedRectForTextContainer(tc).height 
    let lines = Int(Float(height/myFont.lineHeight)) 
    return (height, lines) 
} 

टिप्पणियाँ निश्चित रूप से स्वागत कर रहे हैं! https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/TextLayout/Tasks/StringHeight.html

+0

ओह ... और मुझे एहसास है कि यह उसके प्रश्न का उत्तर नहीं दे सकता है _specifically_, लेकिन यह जो भी हो सकता है, यह उपयोगी हो सकता है। –