Définir la police sur NSAtsortingbutedSsortingng sur UITextView ne tient pas compte de l’interligne

J’essaie de définir une chaîne atsortingbuée à une UITextView dans iOS 6. Le problème est que, si je tente de définir la propriété de police sur la chaîne atsortingbuée, l’interligne est ignoré. Cependant, si je ne définit pas la police et que la police par défaut est utilisée, l’espacement des lignes fonctionne.

NSSsortingng *ssortingng = @" Hello \n world"; attrSsortingng = [[NSMutableAtsortingbutedSsortingng alloc] initWithSsortingng:ssortingng]; NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle defaultParagraphStyle] mutableCopy]; paragraphStyle.minimumLineHeight = 50; // setting the font below makes line spacing become ignored [attrSsortingng addAtsortingbute:NSFontAtsortingbuteName value:[UIFont boldSystemFontOfSize:20] range:NSMakeRange(0, ssortingng.length)]; [attrSsortingng addAtsortingbute:NSParagraphStyleAtsortingbuteName value:paragraphStyle range:NSMakeRange(0, ssortingng.length)]; mainTextView.atsortingbutedText = attrSsortingng; 

Une idée de ce qui se passe?

Guide de programmation de chaînes atsortingbuées:

 UIFont *font = [UIFont fontWithName:@"Palatino-Roman" size:14.0]; NSDictionary *attrsDictionary = [NSDictionary dictionaryWithObject:font forKey:NSFontAtsortingbuteName]; NSAtsortingbutedSsortingng *attrSsortingng = [[NSAtsortingbutedSsortingng alloc] initWithSsortingng:@"ssortinggil" atsortingbutes:attrsDictionary]; 

Mise à jour: j’ai essayé d’utiliser la méthode addAtsortingbute: dans ma propre application, mais cela ne semblait pas fonctionner sur le simulateur iOS 6:

NSLog(@"%@", textView.atsortingbutedText);

Le journal semble afficher correctement les atsortingbuts ajoutés, mais la vue sur le simulateur iOS n’a pas été affichée avec les atsortingbuts.

J’ai trouvé votre question parce que je me battais aussi avec NSAtsortingbutedSsortingng. Pour moi, les méthodes beginEditing et endEditing ont fait l’affaire, comme indiqué dans la section Modification d’une chaîne d’atsortingbut . En dehors de cela, lineSpacing est défini avec setLineSpacing sur le paragrapheStyle.

Vous pouvez donc essayer de changer votre code pour:

 NSSsortingng *ssortingng = @" Hello \n world"; attrSsortingng = [[NSMutableAtsortingbutedSsortingng alloc] initWithSsortingng:ssortingng]; NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle defaultParagraphStyle] mutableCopy]; [paragraphStyle setLineSpacing:20] // Or whatever (positive) value you like... [attrSting beginEditing]; [attrSsortingng addAtsortingbute:NSFontAtsortingbuteName value:[UIFont boldSystemFontOfSize:20] range:NSMakeRange(0, ssortingng.length)]; [attrSsortingng addAtsortingbute:NSParagraphStyleAtsortingbuteName value:paragraphStyle range:NSMakeRange(0, ssortingng.length)]; [attrSsortingng endEditing]; mainTextView.atsortingbutedText = attrSsortingng; 

Cependant, je n’ai pas testé ce code exact, mais le mien est presque identique.

MODIFIER:

En attendant, je l’ai testé et, corrigez-moi si je me trompe, les - beginEditing et - endEditing semblent avoir une grande importance.

Il y avait un bogue dans iOS 6, qui fait en sorte que la hauteur des lignes soit ignorée lorsque la police est définie. Voir la réponse à l’ interligne NSParagraphStyle ignorée et l’parsing des bogues plus longue sur Radar: UITextView ignore la hauteur de ligne minimale / maximale dans la chaîne atsortingbuée .

 //For proper line spacing NSSsortingng *text1 = @"Hello"; NSSsortingng *text2 = @"\nWorld"; UIFont *text1Font = [UIFont fontWithName:@"HelveticaNeue-Medium" size:10]; NSMutableAtsortingbutedSsortingng *atsortingbutedSsortingng1 = [[NSMutableAtsortingbutedSsortingng alloc] initWithSsortingng:text1 atsortingbutes:@{ NSFontAtsortingbuteName : text1Font }]; NSMutableParagraphStyle *paragraphStyle1 = [[NSMutableParagraphStyle alloc] init]; [paragraphStyle1 setAlignment:NSTextAlignmentCenter]; [paragraphStyle1 setLineSpacing:4]; [atsortingbutedSsortingng1 addAtsortingbute:NSParagraphStyleAtsortingbuteName value:paragraphStyle1 range:NSMakeRange(0, [atsortingbutedSsortingng1 length])]; UIFont *text2Font = [UIFont fontWithName:@"HelveticaNeue-Medium" size:16]; NSMutableAtsortingbutedSsortingng *atsortingbutedSsortingng2 = [[NSMutableAtsortingbutedSsortingng alloc] initWithSsortingng:text2 atsortingbutes:@{NSFontAtsortingbuteName : text2Font }]; NSMutableParagraphStyle *paragraphStyle2 = [[NSMutableParagraphStyle alloc] init]; [paragraphStyle2 setLineSpacing:4]; [paragraphStyle2 setAlignment:NSTextAlignmentCenter]; [atsortingbutedSsortingng2 addAtsortingbute:NSParagraphStyleAtsortingbuteName value:paragraphStyle2 range:NSMakeRange(0, [atsortingbutedSsortingng2 length])]; [atsortingbutedSsortingng1 appendAtsortingbutedSsortingng:atsortingbutedSsortingng2]; 

Vous pouvez utiliser cet exemple et modifier son implémentation comme suit:

 [self enumerateAtsortingbute:NSParagraphStyleAtsortingbuteName 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 removeAtsortingbute:NSParagraphStyleAtsortingbuteName range:range]; [self addAtsortingbute:NSParagraphStyleAtsortingbuteName value:paragraphStyle range:range]; }];