IOSでNSAttributedString
sを掘り下げています。人の姓名を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
で非常に面白い外観が得られ、名はセルのラベルの通常のテキストサイズで、最後の名前は印刷されます。名前は非常に小さく印刷されます。
私が望むことを達成する方法はありますか?
ご協力いただきありがとうございます!
これは、現在のフォント属性(およびテキストサイズ)を維持しながら、テキストを太字にするSwift
extension
です。
public extension UILabel {
/// Makes the text bold.
public func makeBold() {
//get the UILabel's 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)
}
}
この質問 からのテクニックを使用してください:
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];
文字列ラベルの2番目の単語を太字にする場合、つまり、デフォルトの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
テーブルのセルコードから上記の呼び出しを行いますが、セルのtextLabelからフォントサイズを取得して、目的のフォントサイズを渡します。
サイズを0.0に設定してみましたか?
StrokeWidth
属性にnegative値を設定することにより、他の属性を変更せずに文字列を太字にすることができます。
Objective-C:
[name setAttributes:@{NSStrokeWidthAttributeName : @-3.0} range:NSRangeFromString(name.string)];
迅速:
name.setAttributes([.strokeWidth: NSNumber(value: -3.0)], range: NSRangeFromString(name.string))