Я пытаюсь узнать о NSMutableAttributedString
и NSAttributedString
, поэтому я создал простую игровую площадку, чтобы попробовать некоторые вещи.Тем не менее, у меня есть пара проблем, которые я не могу выяснить даже после просмотра множества примеров SO (например, здесь и NSRange из Swift Range? в другом месте.
Проблема со свойством длины. Если я указываю длину как attribLabelText.length
, это вызывает неперехваченное исключение. Если я задаю attribLabelText.length - 1
, ошибки нет, но только буквы «Репор» имеют атрибуты, которые я устанавливаю:
import UIKit
import PlaygroundSupport
class MyViewController : UIViewController {
override func loadView() {
let view = UIView()
view.backgroundColor = .white
let label = getLabel1(labelText: "Report")
view.addSubview(label)
self.view = view
}
}
func getLabel1(labelText: String) -> UILabel {
let label = UILabel()
label.frame = CGRect(x: 150, y: 200, width: 200, height: 20)
label.textColor = .black
let attribLabelText: NSMutableAttributedString = NSMutableAttributedString(string: labelText)
let attributes = [
NSAttributedString.Key.foregroundColor : UIColor.gray.cgColor,
NSAttributedString.Key.font : UIFont.boldSystemFont(ofSize: 14)
] as [NSAttributedString.Key : Any]
attribLabelText.addAttributes(attributes, range: NSRange(location: 0, length: attribLabelText.length)) <-- this causes an uncaught exception of type NSException
label.attributedText = attribLabelText
return label
}
// Present the view controller in the Live View window
PlaygroundPage.current.liveView = MyViewController()
У меня такое чувство, что это будет чем-то очевидным, но у меня нет идей, чтобы попробовать. Кто-нибудь может указатьчто я делаю не так?