Ich versuche, eine zugewiesene Zeichenfolge für eine UITextView in iOS 6 festzulegen. Das Problem ist, dass der Zeilenabstand ignoriert wird, wenn ich versuche, die Schriftart-Eigenschaft für die zugewiesene Zeichenfolge festzulegen. Wenn ich jedoch die Schriftart nicht einstelle und die Standardschriftart verwendet wird, funktioniert der Zeilenabstand.
NSString *string = @" Hello \n world";
attrString = [[NSMutableAttributedString alloc] initWithString:string];
NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle defaultParagraphStyle] mutableCopy];
paragraphStyle.minimumLineHeight = 50;
// setting the font below makes line spacing become ignored
[attrString addAttribute:NSFontAttributeName value:[UIFont boldSystemFontOfSize:20] range:NSMakeRange(0, string.length)];
[attrString addAttribute:NSParagraphStyleAttributeName value:paragraphStyle range:NSMakeRange(0, string.length)];
mainTextView.attributedText = attrString;
Irgendeine Idee, was los ist?
objective-c
ios6
Schneemann
quelle
quelle
Antworten:
Programmierhandbuch für zugewiesene Zeichenfolgen:
UIFont *font = [UIFont fontWithName:@"Palatino-Roman" size:14.0]; NSDictionary *attrsDictionary = [NSDictionary dictionaryWithObject:font forKey:NSFontAttributeName]; NSAttributedString *attrString = [[NSAttributedString alloc] initWithString:@"strigil" attributes:attrsDictionary];
Update: Ich habe versucht, die
addAttribute:
Methode in meiner eigenen App zu verwenden, aber sie schien auf dem iOS 6-Simulator nicht zu funktionieren:NSLog(@"%@", textView.attributedText);
Das Protokoll scheint korrekt hinzugefügte Attribute anzuzeigen, aber die Ansicht im iOS-Simulator wurde nicht mit Attributen angezeigt.
quelle
Ich habe Ihre Frage gefunden, weil ich auch mit NSAttributedString gekämpft habe. Für mich haben die Methoden
beginEditing
undendEditing
den Trick ausgeführt, wie unter Ändern einer zugewiesenen Zeichenfolge angegeben . Abgesehen davon wird der Zeilenabstand im Absatzstil festgelegtsetLineSpacing
.Vielleicht möchten Sie versuchen, Ihren Code zu ändern in:
NSString *string = @" Hello \n world"; attrString = [[NSMutableAttributedString alloc] initWithString:string]; NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle defaultParagraphStyle] mutableCopy]; [paragraphStyle setLineSpacing:20] // Or whatever (positive) value you like... [attrSting beginEditing]; [attrString addAttribute:NSFontAttributeName value:[UIFont boldSystemFontOfSize:20] range:NSMakeRange(0, string.length)]; [attrString addAttribute:NSParagraphStyleAttributeName value:paragraphStyle range:NSMakeRange(0, string.length)]; [attrString endEditing]; mainTextView.attributedText = attrString;
Ich habe diesen genauen Code zwar nicht getestet, aber meiner sieht fast gleich aus.
BEARBEITEN:
In der Zwischenzeit habe ich es getestet und, korrigieren Sie mich, wenn ich falsch liege, scheinen die
- beginEditing
und- endEditing
-Anrufe von großer Bedeutung zu sein.quelle
//For proper line spacing NSString *text1 = @"Hello"; NSString *text2 = @"\nWorld"; UIFont *text1Font = [UIFont fontWithName:@"HelveticaNeue-Medium" size:10]; NSMutableAttributedString *attributedString1 = [[NSMutableAttributedString alloc] initWithString:text1 attributes:@{ NSFontAttributeName : text1Font }]; NSMutableParagraphStyle *paragraphStyle1 = [[NSMutableParagraphStyle alloc] init]; [paragraphStyle1 setAlignment:NSTextAlignmentCenter]; [paragraphStyle1 setLineSpacing:4]; [attributedString1 addAttribute:NSParagraphStyleAttributeName value:paragraphStyle1 range:NSMakeRange(0, [attributedString1 length])]; UIFont *text2Font = [UIFont fontWithName:@"HelveticaNeue-Medium" size:16]; NSMutableAttributedString *attributedString2 = [[NSMutableAttributedString alloc] initWithString:text2 attributes:@{NSFontAttributeName : text2Font }]; NSMutableParagraphStyle *paragraphStyle2 = [[NSMutableParagraphStyle alloc] init]; [paragraphStyle2 setLineSpacing:4]; [paragraphStyle2 setAlignment:NSTextAlignmentCenter]; [attributedString2 addAttribute:NSParagraphStyleAttributeName value:paragraphStyle2 range:NSMakeRange(0, [attributedString2 length])]; [attributedString1 appendAttributedString:attributedString2];
quelle
In iOS 6 ist ein Fehler aufgetreten, der dazu führt, dass die Zeilenhöhe beim Festlegen der Schriftart ignoriert wird. Siehe Antwort auf NSParagraphStyle-Zeilenabstand ignoriert und längere Fehleranalyse bei Radar: UITextView ignoriert die minimale / maximale Zeilenhöhe in der zugewiesenen Zeichenfolge .
quelle
Sie können dieses Beispiel verwenden und die Implementierung folgendermaßen ändern:
[self enumerateAttribute:NSParagraphStyleAttributeName inRange:NSMakeRange(0, self.length) options:0 usingBlock:^(id _Nullable value, NSRange range, BOOL * _Nonnull stop) { NSMutableParagraphStyle *paragraphStyle = [[NSParagraphStyle defaultParagraphStyle] mutableCopy]; //add your specific settings for paragraph //... //... [self removeAttribute:NSParagraphStyleAttributeName range:range]; [self addAttribute:NSParagraphStyleAttributeName value:paragraphStyle range:range]; }];
quelle