Ответ 1
Сделайте вышеуказанный вызов из кода ячейки таблицы, но передайте требуемый размер шрифта, получив размер шрифта из ячейки textLabel.
Я копаю в NSAttributedString
на iOS. У меня есть модель, которая возвращает имя и фамилию лиц как NSAttributesString
. (Я не знаю, хорошо ли иметь дело с атрибутами строк в моделях!?) Я хочу, чтобы первое имя печаталось регулярно, где фамилия должна быть выделена жирным шрифтом. Я не хочу устанавливать размер текста. Все, что я нашел до сих пор, это:
- (NSAttributedString*)attributedName {
NSMutableAttributedString* name = [[NSMutableAttributedString alloc] initWithString:self.name];
[name setAttributes:@{NSFontAttributeName : [UIFont boldSystemFontOfSize:[UIFont systemFontSize]]} range:[self.name rangeOfString:self.lastname]];
return name;
}
Однако это, конечно, переопределит размер шрифта последнего имени, что очень забавно выглядит в UITableViewCell
, где первое имя будет напечатано в обычном размере текста метки ячейки и последней имя будет напечатано очень мало.
Есть ли способ достичь того, чего я хочу?
Спасибо за вашу помощь!
Сделайте вышеуказанный вызов из кода ячейки таблицы, но передайте требуемый размер шрифта, получив размер шрифта из ячейки textLabel.
Использовать технику из этого вопроса:
UIFontDescriptor *fontDescriptor = [UIFontDescriptor preferredFontDescriptorWithTextStyle:UIFontTextStyleBody];
uint32_t existingTraitsWithNewTrait = UIFontDescriptorTraitBold;
fontDescriptor = [fontDescriptor fontDescriptorWithSymbolicTraits:existingTraitsWithNewTrait];
UIFont *updatedFont = [UIFont fontWithDescriptor:fontDescriptor size:0.0];
NSDictionary *attribs = @{NSFontAttributeName : updatedFont};
[mutableAttrString setAttributes:attribs range:result.range];
Здесь Swift
extension
, который делает текст полужирным, сохраняя текущие атрибуты шрифта (и размер текста).
public extension UILabel {
/// Makes the text bold.
public func makeBold() {
//get the UILabel fontDescriptor
let desc = self.font.fontDescriptor().fontDescriptorWithSymbolicTraits(.TraitBold)
//Setting size to '0.0' will preserve the textSize
self.font = UIFont(descriptor: desc, size: 0.0)
}
}
Если вы просто хотите выделение жирным шрифтом второго слова в строковой метке, то есть для метки имени при использовании системных шрифтов по умолчанию iOS, то есть заголовка или заголовка и т.д.
let s = "\(client.givenName) \(client.surname)" as NSString
let myAttribute = [ NSFontAttributeName: UIFont.preferredFontForTextStyle(UIFontTextStyleTitle1) ]
let myString = NSMutableAttributedString(string: "\(s)", attributes: myAttribute )
let myRange = s.rangeOfString(client.surname)
let desc = UIFont.preferredFontForTextStyle(UIFontTextStyleTitle1).fontDescriptor().fontDescriptorWithSymbolicTraits(.TraitBold)
let new = UIFont(descriptor: desc, size: 0.0)
myString.addAttribute(NSFontAttributeName, value: new, range: myRange)
nameLabel.attributedText = myString
Пробовали ли вы установить размер 0.0?