我有一个UILabel,当文本的CGSize的宽度大于标签的宽度时,它被设计为在高度上扩展。我用这段代码实现了这个目标:
func viewHeight(_ locationName: String) -> CGFloat {
let locationName = tappedLocation[0].name
var size = CGSize()
if let font = UIFont(name: ".SFUIText", size: 17.0) {
let fontAttributes = [NSAttributedStringKey.font: font]
size = (locationName as NSString).size(withAttributes: fontAttributes)
}
let normalCellHeight = horizontalStackViewHeightConstraint.constant
let extraLargeCellHeight = horizontalStackViewHeightConstraint.constant + 20.33
let textWidth = ceil(size.width)
let cellWidth = ceil(nameLabel.frame.width)
if textWidth > cellWidth {
return extraLargeCellHeight
} else {
return normalCellHeight
}
}
行= 0和换行符样式=自动换行:
标签位于垂直stackView内部,并且被限制在其顶部,前端和后端以及其下方的stackView。当文本的CGSize宽度比标签的宽度长时,标签和UIView的高度适当地扩展。一切都很好。
然而,这些词并不总是包装。这种行为是故意的:
Bobby Mao的中国厨房&酒吧: XL细胞。宽度:184.0, 文字宽度:287.0
这种行为不是(为什么前一行不是“牛排”?):
露丝的克里斯牛排馆: XL细胞。宽度:184.0, 文字宽度:204.0
这也不是(如果Gina超过标签宽度参数,为什么不包装?):
Ristorante Mamma Gina: XL细胞。宽度:184.0, 文字宽度:191.0
我还在标签上设置了临时背景颜色,以确保它确实符合预期的宽度。此示例中的标签在超出标签宽度时创建另一行,但文本未换行:
我已经阅读了Stack Overflow关于自动换行的其他条目。我不相信这是重复的。我为我的文字创建两行没有问题。我没有发生自动换行的麻烦。我发现 和 时遇到了问题。
我认为意图很明确......我错过了什么?