У меня возникают проблемы с созданием NSMutableAttributedString и sizeThatFits. У меня есть UILabel, который должен быть не шире, чем константа self.frame.size.width-usernameX-horizontalMargin
. Я хочу, чтобы UILabel была одной строкой, если она подходит или две строки с дефисом, если она слишком длинная. В настоящее время я использую этот код:Выполнение NSMutableAttributedString и sizeThatFits работают вместе
let usernameX = profilePhoto.frame.size.width+horizontalMargin
let username = UILabel()
username.adjustsFontSizeToFitWidth = false
username.font = UIFont(name: "SFUIDisplay-Regular", size: 18)
username.numberOfLines = 0
username.translatesAutoresizingMaskIntoConstraints = false
//Set hyphenation
let paragraphStyle = NSMutableParagraphStyle()
paragraphStyle.hyphenationFactor = 0.2
username.attributedText = NSMutableAttributedString(string: displayName, attributes: [NSParagraphStyleAttributeName: paragraphStyle])
let maxSize = CGSize(width: self.frame.size.width-usernameX-horizontalMargin, height: CGFloat.max)
let requiredSize = username.sizeThatFits(maxSize)
username.frame = CGRect(x: usernameX, y: (self.frame.size.height/2)-21, width: requiredSize.width, height: requiredSize.height)
self.addSubview(username)
В настоящее время текст отображается как одна строка с дефисом. Вторая строка не отображается. Какие-нибудь идеи, что я могу делать неправильно здесь? Я попытался установить количество строк на 2, что не имело никакого значения. Любые указатели будут действительно оценены.
Спасибо!
Просто попробовал ваш код. Никакой разницы нет. Интересно, влияют ли ограничения на это ... – KexAri
Можете ли вы установить ограничение по высоте для своей метки и изменить ее во время выполнения? –