2017-02-13 2 views
1

Я устанавливаю приписанный текст из кода. infoLabel настроен в раскадровке с семейством шрифтов и размером. infoLabel содержит 3 строки текста.UILabel не отображает приписанный текст

Вот как это должно выглядеть следующим образом:

Labels with 3 lines of text. Some parts of it coloured

Какой код производит:

Label with text: 78 days{}{}...

let daysCount: Int = 78 
let weight: Double = -3.8 
let fitness: Int = 44 // Percent 

var daysWord = NSAttributedString(string: NSLocalizedString("days", comment: "Comparison label line 1")) 
if daysCount == 1 { 
    daysWord = NSAttributedString(string: NSLocalizedString("day", comment: "Comparison label line 1")) 
} 
let firstLine = NSAttributedString(string: "\(daysCount) \(daysWord)") 

let weightString = NSLocalizedString("\(weight) kg", comment: "Comparison label line 2") 
let weightAttributes: [String : Any] = [NSForegroundColorAttributeName : UIColor.geGreenyBlue] 
let attrubutedWeight = NSAttributedString(string: weightString, attributes: weightAttributes) 
let secondLine = NSAttributedString(string: NSLocalizedString("weight: \(attrubutedWeight)", comment: "Comparison label line 2")) 

let thirdLine = NSAttributedString(string: "") 
infoLabel.attributedText = NSAttributedString(string: "\(firstLine)\n \(secondLine)\n \(thirdLine)") 

Когда я установил текст в раскадровку с одной темно-серого цвета, он выглядит хорошо, но тогда, когда я меняю его на код, он добавляет фигурные скобки к нему.

ответ

1

У вашего кода много проблем. Вы не правильно устанавливаете NSAttributedString и, наконец, вы даже не совмещаете несколько NSAttributedString. Так должно быть.

let daysCount: Int = 78 
let weight: Double = -3.8 
let fitness: Int = 44 // Percent 

var daysWord = "days" 
if daysCount == 1 { 
    daysWord = "day" 
} 

let firstLine = NSAttributedString(string: "\(daysCount) \(daysWord)") 

//For Weight 
let weightAttrStr = NSAttributedString(string: "weight: ") 
let weightAttributes: [String : Any] = [NSForegroundColorAttributeName : UIColor. geGreenyBlue] 
let attrubutedWeight = NSAttributedString(string: "\(weight) kg", attributes: weightAttributes) 

//For Fitness 
let fitnessAttrStr = NSAttributedString(string: "fitness: ") 
let fitnessAttributes: [String : Any] = [NSForegroundColorAttributeName : UIColor. geGreenyBlue] 
let attrubutedFitness = NSAttributedString(string: "+\(fitness)%", attributes: fitnessAttributes) 

//Now Combine all the attributed with \n 
let combineAttr = NSMutableAttributedString() 
combineAttr.append(firstLine) 
combineAttr.append(NSAttributedString(string: "\n")) 
combineAttr.append(weightAttrStr) 
combineAttr.append(attrubutedWeight) 

combineAttr.append(NSAttributedString(string: "\n")) 
combineAttr.append(fitnessAttrStr) 
combineAttr.append(attrubutedFitness) 

//Now set textAligment to center 
let paragraph = NSMutableParagraphStyle() 
paragraph.alignment = .center 
let attributes: [String : Any] = [NSParagraphStyleAttributeName: paragraph] 
combineAttr.addAttributes(attributes, range: NSRange(location: 0, length: combineAttr.string.characters.count)) 

//Now set the combine attributedString to label 
infoLabel.attributedText = combineAttr 
+0

Пожалуйста, проверьте отредактированный ответ как только –

+0

Nirav, вы имеете в виду согласиться? Не нужно, он будет принят, даже если вы его отредактируете. Спасибо за ответ, очевидно, мне нужно было внести некоторые изменения, но вы решили мою основную проблему, все, что мне нужно, это вызвать 'append()'. –

+0

@borisy Я говорю, это проверить отредактированный ответ, потому что я отредактировал ответ после того, как я отправил ответ. Поэтому он содержит новые изменения. Не о принимающем ответе, потому что я знаю, что вы уже приняли мой ответ. –

Смежные вопросы