Gibt es eine Möglichkeit, nur einen Teil einer Zeichenfolge fett darzustellen? Zum Beispiel:
Ungefähre Entfernung: 120m weg
Vielen Dank!
Was Sie könnten tun, ist eine 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...
Werfen Sie einen Blick auf diese praktische Dandy-Anleitung , um NSAttributedString
-Objekte mit Kerntext zu zeichnen.
Wie Jacob erwähnt hat, möchten Sie wahrscheinlich eine NSAttributedString
oder eine NSMutableAttributedString
verwenden. Das Folgende ist ein Beispiel, wie Sie dies tun könnten.
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];
Wenn Sie sich nicht mit Schriftarten beschäftigen möchten (da nicht jede Schriftvariante "Fett" enthält), können Sie dies auf andere Weise tun. Bitte beachten Sie, dass dies derzeit nur unter OS X verfügbar ist ...:
NSMutableAttributedString *attrString = [[NSMutableAttributedString alloc] initWithString:"Approximate Distance: 120m away"];
[attrString beginEditing];
[attrString applyFontTraits:NSBoldFontMask
range:NSMakeRange(22, 4)];
[attrString endEditing];
Der obige Code hat mich abgestürzt, als ich UILabel mit diesem attributedString erstellt habe.
Ich habe diesen Code verwendet und es hat funktioniert:
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];
Swift
Enthält auch den Bereich der Zeichenfolge, die Sie dynamisch hervorheben möchten
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
Um eine Zeichenfolge fett darzustellen, ohne die Schriftart fest zu codieren, können Sie das StrokeWidth-Attribut mit einem negativen Wert verwenden:
let s = NSMutableAttributedString(string: "Approximate Distance: 120m away")
s.addAttribute(NSStrokeWidthAttributeName, value: NSNumber(value: -3.0), range: NSRange(22..<26))
Eine NSString
ist nur ein Datencontainer. Es enthält keine Details zu den Anliegen der Präsentation.
Es klingt wie das, was Sie wahrscheinlich tun möchten, ist ein fetter Teil der UILabel
, die zur Anzeige Ihrer Zeichenfolge verwendet wird. Was ich nicht glaube, kannst du tun. Sie können die Benutzeroberfläche jedoch immer in drei Labels unterteilen, eines für "Approximate Distance:", eines für "120 m" und eines für "Away". Platzieren Sie sie in einer Linie und Sie sollten den gewünschten Effekt erzielen.
Eine andere Option könnte darin bestehen, eine UIWebView
und ein wenig Markup zu verwenden, um Ihre Zeichenfolge mit eingebetteten Formatierungsinformationen anzuzeigen, wie hier beschrieben:
http://iphoneincubator.com/blog/windows-views/display-rich-text-using-a-uiwebview
In Xamarin ios können Sie einen Teil eines NSStrings folgendermaßen darstellen:
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;
}
und rufen Sie diese Methode auf:
myLabel = new UILabel ();
...
myLabel.AttributedText = BoldRangeOfString("my text", fontSize, startRange, lengthRange);
Ich habe @Jacob Relkin und @Andrew Marin antwortet, sonst habe ich die Abstürze bekommen. Hier ist die Antwort für 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];
Ich habe mir die offizielle Dokumentation angesehen: 1 und 2 .
Wenn Sie die Schriftart und/oder die Größe nicht fest codieren möchten, versuchen Sie diesen Code, um volle Strings darzustellen:
NSMutableAttributedString *myString = [[NSMutableAttributedString alloc] initWithString:mainString];
[myString beginEditing];
[myString addAttribute:NSStrokeWidthAttributeName
value:[[NSNumber alloc] initWithInt: -3.f]
range:NSMakeRange(0, [mainString length])];
[myString endEditing];