Любой способ выделить жирным шрифтом часть NSString?
есть ли способ выделить жирным шрифтом только часть строки? Например:
Приблизительное Расстояние: 120m до
спасибо!
9 ответов:
что ты может использовать
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...
посмотри это удобный денди руководство для рисования
NSAttributedString
объекты с основным текстом.
как упоминал Джейкоб, вы, вероятно, хотите использовать
NSAttributedString
илиNSMutableAttributedString
. Ниже приведен один из примеров того, как это можно сделать.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];
Если вы не хотите заморачиваться со шрифтами (так как не все вариации шрифта "полужирный"), вот еще один способ сделать это. Обратите внимание, что в настоящее время это доступно только на OS X...:
NSMutableAttributedString *attrString = [[NSMutableAttributedString alloc] initWithString:"Approximate Distance: 120m away"]; [attrString beginEditing]; [attrString applyFontTraits:NSBoldFontMask range:NSMakeRange(22, 4)]; [attrString endEditing];
приведенный выше код дал мне сбой, когда я создал UILabel с этой attributedString.
я использовал этот код и он работал:
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];
чтобы выделить жирным шрифтом строку без жесткого кодирования ее шрифта, можно использовать атрибут StrokeWidth с отрицательным значением:
let s = NSMutableAttributedString(string: "Approximate Distance: 120m away") s.addAttribute(NSStrokeWidthAttributeName, value: NSNumber(value: -3.0), range: NSRange(22..<26))
An
NSString
- Это просто контейнер данных. Он не содержит никаких подробностей о проблемах презентации.похоже, что вы, вероятно, хотите сделать, это смелое часть
UILabel
используется для отображения строк. Но я не думаю, что ты сможешь это сделать. Но вы всегда можете разбить пользовательский интерфейс на три метки: одна для " приблизительного расстояния:", одна для"120 м", и для "далеко". Поместите их в линию друг с другом и вы должны получить желаемый эффект.другой вариант может заключаться в использовании
UIWebView
и немного разметки для отображения строки со встроенной информация форматирования, как описано здесь:http://iphoneincubator.com/blog/windows-views/display-rich-text-using-a-uiwebview
Свифт
также включает в себя получение диапазона строки, которую вы хотите подбодрить динамически
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
в Xamarin ios вы можете выделить жирным шрифтом часть NSString следующим образом:
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; }
и вызвать этот метод:
myLabel = new UILabel (); ... myLabel.AttributedText = BoldRangeOfString("my text", fontSize, startRange, lengthRange);
я связал @Jacob Relkin и @Andrew Marin ответы, в противном случае, я получил аварии. Вот ответ для 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];