2013-02-27 162 views
13

के साथ एक मल्टीलाइन UILabel को प्रस्तुत करने के लिए मैं एक NSMutableAttributedString के साथ एक multiline UILabel बनाने की कोशिश कर रहा हूं। यह ठीक काम करता है जब मैं इस तरह पूरा स्ट्रिंग के लिए एक विशेषता आवंटित:NSMutableAttributedString

UILabel *contentLabel = [[UILabel alloc] initWithFrame:CGRectMake(0,0,200,100)]; 
[contentLabel setLineBreakMode:NSLineBreakByWordWrapping]; 
[contentLabel setNumberOfLines:0]; 
[contentLabel setFont:[UIFont systemFontOfSize:13]; 

NSMutableAttributedString *string = [[NSMutableAttributedString alloc] initWithString:@"hello I am a long sentence that should break over multiple lines"]; 
[string addAttribute:NSFontAttributeName value:[UIFont boldSystemFontOfSize:13] range:NSMakeRange(0, [string length])]; 

contentLabel.attributedText = string; 

लेकिन मैं मैं क्या जरूरत है (बोल्ड कुछ शब्दों के लिए) NSAttributedString के विभिन्न subranges के लिए विशेषताओं के एक नंबर को लागू करने के लिए है।

UILabel *contentLabel = [[UILabel alloc] initWithFrame:CGRectMake(0,0,200,100)]; 
[contentLabel setLineBreakMode:NSLineBreakByWordWrapping]; 
[contentLabel setNumberOfLines:0]; 
[contentLabel setFont:[UIFont systemFontOfSize:13]; 

NSMutableAttributedString *string = [[NSMutableAttributedString alloc] initWithString:@"hello I am a long sentence that should break over multiple lines"]; 
[string addAttribute:NSFontAttributeName value:[UIFont boldSystemFontOfSize:13] range:NSMakeRange(3, 5)]; 

contentLabel.attributedText = string; 

मुझे जो मिल रहा है वह यह है कि यदि मैं ऐसा करता हूं, तो लेबल अब लेबल में कई पंक्तियों पर प्रस्तुत नहीं किया जाता है। इसे एक लाइन के रूप में प्रस्तुत किया जाता है, जो लेबल के फ्रेम में लंबवत केंद्रित होता है।

क्या मुझे कुछ याद आ रही है?

+1

क्या आपने दूसरी पंक्ति के लिए लेबल लंबा बना दिया था? –

+0

मैं इसे 6.1 पर पुन: उत्पन्न नहीं कर सकता। मुझे लगता है कि सेट कोड में आपका कोड थोड़ा गलत है (वहां एक गुम है] लाइन और आप एक ही स्थान पर "contentLabel" के बजाय "लेबल" का उपयोग करते हैं)। क्या आप वाकई वास्तविक कोड हैं? –

+0

@ केविन Ballard: हाँ, लेबल काफी लंबा है। – adriaan

उत्तर

4

के रूप में प्रश्न की टिप्पणी में चर्चा की, प्रश्न में प्रस्तुत कोड वास्तव में सही ढंग से काम करता है, और जिम्मेदार ठहराया स्ट्रिंग रेंडर करता है जैसा सोचा वैसा। (समस्या मेरे कोड में कहीं और थी)

1

मैं अक्सर UITextView उपयोग करें और यह एक पाठ उसी तरह से जिम्मेदार ठहराया आवंटित:

 // creiamo textView descrizione 
    UITextView *description = [[UITextView alloc] init]; 
    description.frame = CGRectMake(20, 453, 500, 190); 

    NSDictionary *attribute1 = @{NSForegroundColorAttributeName: [UIColor blackColor], 
            NSBackgroundColorAttributeName: [UIColor clearColor], 
            NSFontAttributeName: [UIFont fontWithName:@"HelveticaNeue-Bold" size:22.0], 
            }; 

    NSDictionary *attribute2 = @{NSForegroundColorAttributeName: [UIColor blackColor], 
             NSBackgroundColorAttributeName: [UIColor clearColor], 
             NSFontAttributeName: [UIFont fontWithName:@"HelveticaNeue" size:10], 
             }; 

    NSDictionary *attribute3 = @{NSForegroundColorAttributeName: [UIColor blackColor], 
              NSBackgroundColorAttributeName: [UIColor clearColor], 
              NSFontAttributeName: [UIFont fontWithName:@"HelveticaNeue" size:14.0] 
              }; 

    NSMutableAttributedString *info = [[NSMutableAttributedString alloc] initWithString:[NSString stringWithFormat:@"%@ %@ %@ \n\n%@ \n  ", string1, string2 , string3, string4]]; 

    [info setAttributes:attribute1 range:NSMakeRange(0, ([string1 length]))]; 
    [info setAttributes:attribute2 range:NSMakeRange(([string1 length]),([string2 length]+[string3 length]))]; 
    [info setAttributes:attribute3 range:NSMakeRange(([string1 length] [string2 length]+[string3 length]), [string4 length])]; 

    description.attributedText = info; 
    description.backgroundColor = [UIColor clearColor]; 
    description.editable = NO; 
    description.textColor = [UIColor blackColor]; 
    [viewInfo addSubview:description]; 
    [description sizeToFit];