Следующее расширение может использоваться для вычисления высоты и ширины метки.
extension String {
//Calculate height and width for label with string
func height(withConstrainedWidth width: CGFloat, font: UIFont) -> CGFloat {
let constraintRect = CGSize(width: width, height: .greatestFiniteMagnitude)
let boundingBox = self.boundingRect(with: constraintRect, options: .usesLineFragmentOrigin, attributes: [NSAttributedStringKey.font: font], context: nil)
return ceil(boundingBox.height)
}
func width(withConstrainedHeight height: CGFloat, font: UIFont) -> CGFloat {
let constraintRect = CGSize(width: .greatestFiniteMagnitude, height: height)
let boundingBox = self.boundingRect(with: constraintRect, options: .usesLineFragmentOrigin, attributes: [NSAttributedStringKey.font: font], context: nil)
return ceil(boundingBox.width)
}
}
В вашем случае, поскольку размер кнопки фиксирован, вы можете рассчитать ширину метки, используя вышеуказанное расширение иможет использоваться для установки ограничения ширины всего представления.Если ваша метка имеет ведущее ограничение 8 и конечное ограничение 8 для кнопки, а кнопка имеет конечное ограничение 8 для представления контейнера, тогда вы можете рассчитать требуемую ширину для своего представления как:
viewWidthConstraint.constant = 8+<width of string from the above extension>+8+<width of button>+8
Здесь единственным изменяющимся параметром будет ширина метки.