Est-il possible de mettre en gras uniquement une partie d'une chaîne? Par exemple:
Distance approximative: 120m loin
Merci!
Ce que vous pourriez faire, c’est utiliser un NSAttributedString
.
NSString *boldFontName = [[UIFont boldSystemFontOfSize:12] fontName];
NSString *yourString = ...;
NSRange boldedRange = NSMakeRange(22, 4);
NSMutableAttributedString *attrString = [[NSMutableAttributedString alloc] initWithString:yourString];
[attrString beginEditing];
[attrString addAttribute:kCTFontAttributeName
value:boldFontName
range:boldedRange];
[attrString endEditing];
//draw attrString here...
Jetez un coup d’œil à ce guide pratique pour dandy pour dessiner des objets NSAttributedString
avec Core Text.
Comme Jacob l'a mentionné, vous voudrez probablement utiliser un NSAttributedString
ou un NSMutableAttributedString
. Voici un exemple de la façon dont vous pourriez le faire.
NSMutableAttributedString *string = [[NSMutableAttributedString alloc] initWithString:@"Approximate Distance: 120m away"];
NSRange selectedRange = NSMakeRange(22, 4); // 4 characters, starting at index 22
[string beginEditing];
[string addAttribute:NSFontAttributeName
value:[NSFont fontWithName:@"Helvetica-Bold" size:12.0]
range:selectedRange];
[string endEditing];
Si vous ne voulez pas vous soucier des polices (comme chaque variante de police ne contient pas "Gras"), voici une autre façon de procéder. Veuillez noter que cette option n'est actuellement disponible que sur OS X ...:
NSMutableAttributedString *attrString = [[NSMutableAttributedString alloc] initWithString:"Approximate Distance: 120m away"];
[attrString beginEditing];
[attrString applyFontTraits:NSBoldFontMask
range:NSMakeRange(22, 4)];
[attrString endEditing];
Le code ci-dessus m'a causé un crash lorsque j'ai créé UILabel avec cette chaîne attribuée.
J'ai utilisé ce code et cela a fonctionné:
NSMutableAttributedString *attrString = [[NSMutableAttributedString alloc] initWithString:string];
NSRange boldedRange = NSMakeRange(0, 1);
UIFont *fontText = [UIFont systemFontOfSize:12]; //[UIFont fontWithName:@"Lato-Bold" size:12];
NSDictionary *dictBoldText = [NSDictionary dictionaryWithObjectsAndKeys:fontText, NSFontAttributeName, nil];
[attrString setAttributes:dictBoldText range:boldedRange];
Rapide
Comprend également l’obtention de la plage de la chaîne que vous souhaitez dynamiser de manière dynamique
let nameString = "Magoo"
let string = "Hello my name is \(nameString)"
let attributes = [NSFontAttributeName:UIFont.systemFontOfSize(14.0),NSForegroundColorAttributeName: UIColor.black]
let boldAttribute = [NSFontAttributeName:UIFont.boldSystemFontOfSize(14.0)]
let attributedString = NSMutableAttributedString(string: string, attributes: attributes)
let nsString = NSString(string: string)
let range = nsString.rangeOfString(nameString)
if range.length > 0 { attributedString.setAttributes(boldAttribute, range: range) }
someLabel.attributedText = attributedString
Pour mettre en gras une chaîne sans coder en dur sa police, vous pouvez utiliser l'attribut StrokeWidth avec une valeur négative:
let s = NSMutableAttributedString(string: "Approximate Distance: 120m away")
s.addAttribute(NSStrokeWidthAttributeName, value: NSNumber(value: -3.0), range: NSRange(22..<26))
Un NSString
est juste un conteneur de données. Il ne contient aucun détail sur les problèmes de présentation.
Il semble que ce que vous souhaitiez probablement faire soit une partie en gras de la UILabel
utilisée pour afficher votre chaîne. Ce que je ne pense pas que vous puissiez faire. Mais vous pouvez toujours diviser l’interface utilisateur en trois libellés, un pour "Distance approximative:", un pour "120 m" et un pour "absent". Placez-les en ligne les uns avec les autres et vous devriez obtenir l'effet désiré.
Une autre option pourrait être d'utiliser une variable UIWebView
et un peu de balisage pour afficher votre chaîne avec des informations de formatage incorporées, comme indiqué ici:
http://iphoneincubator.com/blog/windows-views/display-rich-text-using-a-uiwebview
Dans Xamarin ios, vous pouvez mettre en gras une partie d’un NSString de la manière suivante:
public static NSMutableAttributedString BoldRangeOfString (string str, float fontSize, int startRange, int lengthRange)
{
var firstAttributes = new UIStringAttributes {
Font = UIFont.BoldSystemFontOfSize(fontSize)
};
NSMutableAttributedString boldString = new NSMutableAttributedString (str);
boldString.SetAttributes (firstAttributes.Dictionary, new NSRange (startRange, lengthRange));
return boldString;
}
et appelez cette méthode:
myLabel = new UILabel ();
...
myLabel.AttributedText = BoldRangeOfString("my text", fontSize, startRange, lengthRange);
J'ai couplé @Jacob Relkin et @Andrew Marin, sinon j'ai eu les accidents. Voici la réponse pour iOS9:
UIFont *boldFont = [UIFont boldSystemFontOfSize:12];
NSString *yourString = @"Approximate Distance: 120m away";
NSRange boldedRange = NSMakeRange(22, 4);
NSMutableAttributedString *attrString = [[NSMutableAttributedString alloc] initWithString:yourString];
[attrString beginEditing];
[attrString addAttribute:NSFontAttributeName
value:boldFont
range:boldedRange];
[attrString endEditing];
Si vous ne voulez pas coder en dur la police ou/et la taille, essayez ce code pour mettre des chaînes pleines en gras:
NSMutableAttributedString *myString = [[NSMutableAttributedString alloc] initWithString:mainString];
[myString beginEditing];
[myString addAttribute:NSStrokeWidthAttributeName
value:[[NSNumber alloc] initWithInt: -3.f]
range:NSMakeRange(0, [mainString length])];
[myString endEditing];