NSAttributedString изменяет стиль на полужирный, не меняя pointSize? - программирование
Подтвердить что ты не робот

NSAttributedString изменяет стиль на полужирный, не меняя pointSize?

Я копаю в 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, где первое имя будет напечатано в обычном размере текста метки ячейки и последней имя будет напечатано очень мало.

Есть ли способ достичь того, чего я хочу?

Спасибо за вашу помощь!

4b9b3361

Ответ 1

Сделайте вышеуказанный вызов из кода ячейки таблицы, но передайте требуемый размер шрифта, получив размер шрифта из ячейки textLabel.

Ответ 2

Использовать технику из этого вопроса:

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];

Ответ 3

Здесь 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)
    }

}

Ответ 4

Если вы просто хотите выделение жирным шрифтом второго слова в строковой метке, то есть для метки имени при использовании системных шрифтов по умолчанию 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

Ответ 5

Пробовали ли вы установить размер 0.0?