J'utilise la famille police personnalisée « aller Typo » dans notre application avec une fonction de soutien édition de texte multilingue (UITextView) et l'utilisation -fallback police sur le texte appliqué avec les attributs de police personnalisée sur NSAttributedString
« AllerTypo-Light » pour texte brut (sans caractères)
"AllerTypo-Regular" pour gras.
"AllerTypo-LightItalic" pour l'italique.
"AllerTypo-Italic" pour gras italique.
Le problème est quand je demande la police sur les textes (glyphes) non pris en charge dans cette famille de polices, il fallback vraisemblablement à une police (par exemple « Helvetica » famille pour le texte russe) réappliquer les traits du visage de police du client, mais ignorant le fait que j'utilise la version "AllerTypo-Regular" pour gras -ness. S'il vous plaît, aidez-moi à résoudre cela.
Veuillez voir ci-dessous extrait de code pour ce dont j'ai parlé ci-dessus.
// Apply current theme on default attributes (like font, text color)
NSMutableAttributedString *updatedAttribText = [attribText mutableCopy];
[updatedAttribText beginEditing];
[attribText enumerateAttributesInRange:NSMakeRange(0, attribText.length)
options:0
usingBlock:^(NSDictionary *attrs, NSRange range, BOOL *stop) {
// Check for font attributes
UIFont *textRunfont = [attrs objectForKey:NSFontAttributeName];
NSMutableDictionary *updatedAttribs = [attrs mutableCopy];
[updatedAttribs updateAttributesWithTextStyle:textRunfont.fontDescriptor.symbolicTraits action:YES fontFamily:@"Aller Typo"];
// Check for default text color now
UIColor *textRunColor = [attrs objectForKey:NSForegroundColorAttributeName];
if ([textRunColor isEqual:[UIColor colorWithRed:0 green:0 blue:0 alpha:1.0]]) {
UIColor *defaultTextColor = [[QGThemeHelper currentTheme] uiTextViewTextColor];
[updatedAttribs setValue:defaultTextColor forKey:NSForegroundColorAttributeName];
}
[updatedAttribText setAttributes:updatedAttribs range:range];
}];
[updatedAttribText endEditing];
Méthode de catégorie NSMutableDictionary, utilisée ci-dessus, pour mettre à jour les attributs de texte.
- (void)updateAttributesWithTextStyle:(UIFontDescriptorSymbolicTraits)updateStyleTraits action:(BOOL)addAction fontFamily:(NSString *)familyName
{
UIFont *currentFont = [self objectForKey:NSFontAttributeName];
UIFontDescriptorSymbolicTraits updatedTraits = 0;
// Fetch existing traits and then apply the text style
if (!addAction) { // Remove
updatedTraits = ([currentFont qg_textStyleTraits] & ~updateStyleTraits);
}
else { // Apply
updatedTraits = ([currentFont qg_textStyleTraits] | updateStyleTraits);
}
// Appropriate font from the family with mentioned traits (bold, italic, bold italic).
NSString *updatedFontName = [UIFont qg_fontNameFromFamily:familyName withTextStyleTraits:updatedTraits];
UIFont *updatedFont = [UIFont fontWithName:updatedFontName size:currentFont.pointSize];
[self setObject:updatedFont forKey:NSFontAttributeName];
}
En d'autres termes, est-il un moyen que je peux communiquer à fallback système sur mes intentions (personnalisation de la police)? La fonctionnalité italique fonctionne bien car la police "AllerTypo-Italic" porte ce trait et le système le réapplique pendant le repli.
Remarque supplémentaire - La source de contenu textuel (texte attribué) est une balise HTML codée stockée dans CoreData qui est également synchronisée avec notre application Web.