2016-04-07 5 views
8

У меня есть UILabel Я сделал программно как:сделать часть UILabel жирным шрифтом Swift

var label = UILabel() 

Я тогда объявил некоторые стили для метки, включая шрифт, такие как:

label.frame = CGRect(x: 20, y: myHeaderView.frame.height/2, width: 300, height: 30) 
label.font = UIFont(name: "Typo GeoSlab Regular Demo", size: 15) 
label.textColor = UIColor(hue: 0/360, saturation: 0/100, brightness: 91/100, alpha: 1) 

Первая часть этикетки всегда будет читаться: "Filter:" затем последовала еще одна часть строки, например, «Самые популярные»

Я хотел бы слово фильтр, чтобы быть я п полужирный, так что все будет выглядеть так:

Фильтр: Самые популярные

Я хочу простой способ создания этого эффекта. Я искал в Интернете, как добиться этого, и есть так много способов, некоторые из которых просто выглядят как страницы кода. И большинство из них, похоже, находится в Objective-C. Я бы хотел, чтобы это было в Swift, пожалуйста :)

Я не знаю, если я на правильных строках, но это то, что может сделать NSRange? Заранее спасибо

Update

Я использую серию if заявлений, чтобы изменить мою label переменными. Такие, как:

if indexArray == 1 { 

    label.text = "Filter: Film name" 

} else if indexArray == 2 { 

    label.text = "Filter: Most popular" 

} else if indexArray == 3 { 

    label.text = "Filter: Star rating" 

} 

ответ

17

Вы хотите использовать attributedString, который позволяет вам части стиля строки и т.д. Это может быть сделано, как это, имея два стиля, один нормальный, один жирный, а затем прикрепляя их вместе:

let boldText = "Filter:" 
let attrs = [NSFontAttributeName : UIFont.boldSystemFontOfSize(15)] 
let attributedString = NSMutableAttributedString(string:boldText, attributes:attrs) 

let normalText = "Hi am normal" 
let normalString = NSMutableAttributedString(string:normalText) 

attributedString.appendAttributedString(normalString) 

Если вы хотите, чтобы назначить его на этикетке:

label.attributedText = attributedString 
+0

Спасибо за ваш ответ! Кажется, он работает. Однако мне нужна поправка. Как бы я это сделал, если бы мне нужно, чтобы normalText был другой строкой в ​​зависимости от количества индексов. См. Раздел ** Обновление ** моего вопроса. Заранее спасибо! – Nick89

+0

Вы можете вытащить normalText из массива и просто получить его по индексу: normalText = normalTextArray [index], где это похоже на normalTextArray = ["Hello", "Two", "Three"] –

10

вы можете использовать NSMutableAttributedString и NSAttributedString создать настроенную строку. Нижеприведенная функция дает выделенную boldString полужирным шрифтом в заданной строке.

Свифта 3

func attributedText(withString string: String, boldString: String, font: UIFont) -> NSAttributedString { 
    let attributedString = NSMutableAttributedString(string: string, 
                attributes: [NSFontAttributeName: font]) 
    let boldFontAttribute: [String: Any] = [NSFontAttributeName: UIFont.boldSystemFont(ofSize: font.pointSize)] 
    let range = (string as NSString).range(of: boldString) 
    attributedString.addAttributes(boldFontAttribute, range: range) 
    return attributedString 
} 

Пример использования

authorLabel.attributedText = attributedText(withString: String(format: "Author : %@", user.name), boldString: "Author", font: authorLabel.font) 

Свифта 4

func attributedText(withString string: String, boldString: String, font: UIFont) -> NSAttributedString { 
    let attributedString = NSMutableAttributedString(string: string, 
                attributes: [NSAttributedStringKey.font: font]) 
    let boldFontAttribute: [NSAttributedStringKey: Any] = [NSAttributedStringKey.font: UIFont.boldSystemFont(ofSize: font.pointSize)] 
    let range = (string as NSString).range(of: boldString) 
    attributedString.addAttributes(boldFontAttribute, range: range) 
    return attributedString 
} 
0

Свифта 4 Альтернативный:

let attrs = [NSAttributedStringKey.font : UIFont.boldSystemFont(ofSize: 14)] 
let attributedString = NSMutableAttributedString(string: "BOLD TEXT", attributes:attrs) 
let normalString = NSMutableAttributedString(string: "normal text") 
attributedString.append(normalString) 
myLabel.attributedText = attributedString 
Смежные вопросы