Gibt es eine Möglichkeit, nur einen Teil einer Zeichenfolge fett zu schreiben? Zum Beispiel:
Ungefähre Entfernung: 120 m entfernt
Vielen Dank!
Gibt es eine Möglichkeit, nur einen Teil einer Zeichenfolge fett zu schreiben? Zum Beispiel:
Ungefähre Entfernung: 120 m entfernt
Vielen Dank!
Antworten:
Was Sie tun könnten , 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...
Schauen Sie sich diese praktische Dandy-Anleitung zum Zeichnen von NSAttributedStringObjekten mit Core Text an.
NSFontAttributeNameist nur unter OS X verfügbar.
Wie Jacob erwähnt hat, möchten Sie wahrscheinlich ein NSAttributedStringoder ein verwenden NSMutableAttributedString. Das Folgende ist ein Beispiel dafür, 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];
Use of Undeclared identifier 'NSFont'in der value:Leitung. Wie behebe ich das?
@nach Ihrer initWithString:Methode eine Zeichenfolge um die Beispielzeichenfolge . :)
NSFontdurchUIFont
Wenn Sie sich nicht mit Schriftarten beschäftigen möchten (da nicht jede Schriftvariante "Fett" enthält), können Sie dies auf folgende 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 zum Absturz gebracht, als ich UILabel mit diesem zugeschriebenen String 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];
Schnell
Beinhaltet auch das Abrufen des Bereichs der Zeichenfolge, die Sie dynamisch ermutigen 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 zu schreiben, ohne ihre 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))
An NSStringist nur ein Datencontainer. Es enthält keine Details zu Präsentationsproblemen.
Es hört sich so an, als ob Sie wahrscheinlich einen fett gedruckten Teil des UILabelStrings verwenden möchten , der zum Anzeigen Ihrer Zeichenfolge verwendet wird. Was ich nicht glaube, dass du es kannst. Sie können die Benutzeroberfläche jedoch jederzeit in drei Bezeichnungen unterteilen, eine für "Ungefähre Entfernung:", eine für " 120 m " und eine für "weg". Platzieren Sie sie in einer Linie miteinander und Sie sollten den gewünschten Effekt erzielen.
Eine andere Option könnte darin bestehen, UIWebViewein 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 NSString folgendermaßen fett formatieren:
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 gekoppelt 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 offiziellen Unterlagen angesehen: 1 und 2 .
Kürzere Art und Weise mit Swift5 +
let labelNotes = UILabel() //or UITextView(), etc...
let attributedNotes = NSMutableAttributedString(string: "Bold: some stuff not bold")
attributedNotes.addAttribute(NSAttributedString.Key.font, value: UIFont.boldSystemFont(ofSize: 14), range: NSRange(location: 0, length: 5))
labelNotes.attributedText = attributedNotes
Wenn Sie die Schriftart oder / und die Größe nicht fest codieren möchten, versuchen Sie diesen Code, um vollständige Zeichenfolgen zu fetten:
NSMutableAttributedString *myString = [[NSMutableAttributedString alloc] initWithString:mainString];
[myString beginEditing];
[myString addAttribute:NSStrokeWidthAttributeName
value:[[NSNumber alloc] initWithInt: -3.f]
range:NSMakeRange(0, [mainString length])];
[myString endEditing];