2014-03-27 5 views
18

Ich verwende NSMutableAttributedString und NSAttributedString, um einen Beschriftungstext in zwei verschiedenen Schriftgrößen anzuzeigen. Mein Ansatz ist:Das Anhängen von NSAttributedString mit Zeilenumbruch gibt attributierte Zeichenfolge mit falschem Format zurück

NSMutableAttributedString *muAtrStr = [[NSMutableAttributedString alloc]initWithString:@"2"]; 
NSAttributedString *atrStr = [[NSAttributedString alloc]initWithString:@"days" attributes:@{NSFontAttributeName : [UIFont fontWithName:@"HelveticaNeue-Bold" size:8]}]; 
[muAtrStr appendAttributedString:atrStr]; 

Was mich ein Zugeschrieben String zurückgibt mit „2“ in der Schriftgröße 12 und „Tage“ in der Schriftgröße 8.

Allerdings ist das andere Szenario einen Zeilenumbruch hinzuzufügen, nachdem 2. Ich verwende den folgenden Code:

NSMutableAttributedString *muAtrStr = [[NSMutableAttributedString alloc]initWithString:@"2"]; 
NSAttributedString *atrStr = [[NSAttributedString alloc]initWithString:@"\ndays" attributes:@{NSFontAttributeName : [UIFont fontWithName:@"HelveticaNeue-Bold" size:8]}]; 
[muAtrStr appendAttributedString:atrStr]; 

Diese Zeit attributierte Zeichenfolge gilt das Attribut im Volltext. Ich erhalte eine Zeichenfolge zurück mit „2 \ nTage“ in Schriftgröße 8.

+0

Bitte leite mich, wenn es ein besserer Ansatz ist das nötige zu tun. – user3404693

+0

Sie können auch '- (void) addAttribute verwenden: (NSString *) name value: (id) Wertebereich: (NSRange) range' Methode der attributierten Zeichenfolge, um das Attribut auf einen anderen Teil der attributierten Zeichenfolge zu setzen. Und 'setLineBreakMode' von label zu' NSLineBreakByWordWrapping'. – Akhilrajtr

+0

Für diejenigen, die wie ich stecken geblieben war, setze yourLabel.numberOfLines = 0; im Code. – Borzh

Antwort

32

diesen Code unten versuchen, es funktioniert gut: -

NSMutableAttributedString *muAtrStr = [[NSMutableAttributedString alloc]initWithString:@"2"]; 
NSAttributedString *atrStr = [[NSAttributedString alloc]initWithString:@"\ndays" attributes:@{NSFontAttributeName : [UIFont fontWithName:@"HelveticaNeue-Bold" size:8]}]; 
[muAtrStr appendAttributedString:atrStr]; 
self.lbl.numberOfLines = 0; 
[self.lbl setAttributedText:muAtrStr]; 

Hinweis: - Auch eine beliebige Anzahl von NumberOfLines auf 0 gesetzt für das Erlauben Linien

+0

Aber in UILabel zeigt es beide 2 und Tage in der gleichen Schriftgröße i-e 8. Ich möchte 2 in 12 Schriftgröße und Tage in 8 Schriftgröße anzeigen. – user3404693

+0

nur für den Text "Tage". 12 Schriftgröße ist Standard für die "2" Zeichenfolge. Perfekt funktioniert, wenn ich \ n in der Zeichenfolge nicht verwende. – user3404693

+0

Entschuldigung, es hat auch nicht funktioniert ... Könnte für die Textansicht funktionieren, nicht für uilabel. – user3404693

2

Dies funktioniert in Swift:

let attributedText = NSAttributedString(string: "Happy \nDays") 
label.numberOfLines = 0 
label.lineBreakMode = .byWordWrapping 
label.attributedText = attributedText 
Verwandte Themen