Gibt es eine Möglichkeit, nur einen Teil einer Zeichenfolge fett zu schreiben? Zum Beispiel:
Ungefähre Entfernung: 120 m entfernt
Vielen Dank!
objective-c
ios
nsstring
Zhen
quelle
quelle
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
NSAttributedString
Objekten mit Core Text an.quelle
NSFontAttributeName
ist nur unter OS X verfügbar.Wie Jacob erwähnt hat, möchten Sie wahrscheinlich ein
NSAttributedString
oder ein verwendenNSMutableAttributedString
. 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];
quelle
Use of Undeclared identifier 'NSFont'
in dervalue:
Leitung. Wie behebe ich das?@
nach IhrerinitWithString:
Methode eine Zeichenfolge um die Beispielzeichenfolge . :)NSFont
durchUIFont
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];
quelle
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];
quelle
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
quelle
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))
quelle
An
NSString
ist 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
UILabel
Strings 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,
UIWebView
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
quelle
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);
quelle
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 .
quelle
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
quelle
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];
quelle