gpt4 book ai didi

ios - 平衡多行 UILabel

转载 作者:可可西里 更新时间:2023-11-01 05:34:09 33 4
gpt4 key购买 nike

当我创建一个 UILabel 并将 textAlignement 设置为 NSTextAlignmentCenter 时,lineBreakModeNSLineBreakByWordWrapping 和一个长文本,它像这样拆分:

+------------------------------------+
| Text that does not fit on a single |
| line |
+------------------------------------+

但我真正想要的是这样的:

+------------------------------------+
| Text that does not fit |
| on a single line |
+------------------------------------+

当然,我不想手动处理换行符。我希望标签自动平衡线条,使它们的长度尽可能接近。

最佳答案

我在 Swift 3 (iOS 10) 中工作,所以我转换了 dev_jac对有需要的人的回答:

override func drawText(in rect: CGRect) {
var newRect = rect

if (textAlignment == .center) {
let oneLineRect = self.textRect(forBounds: CGRect.infinite, limitedToNumberOfLines: 1)
let numLines = ceil(oneLineRect.size.width / self.bounds.size.width)
var betterWidth : CGFloat = oneLineRect.size.width / numLines
if (betterWidth < rect.size.width) {
var check = CGRect.zero
repeat {
betterWidth *= 1.1
let b = CGRect(x: 0, y: 0, width: betterWidth, height: CGRect.infinite.size.height)
check = self.textRect(forBounds: b, limitedToNumberOfLines: 0)
} while (check.size.height > rect.size.height && betterWidth < rect.size.width)

if betterWidth < rect.size.width {
let difference : CGFloat = rect.size.width - betterWidth
newRect = CGRect(x: rect.origin.x + difference/2, y: rect.origin.y, width: betterWidth, height: rect.size.height)
}
}
}

super.drawText(in: newRect)
}

关于ios - 平衡多行 UILabel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26530330/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com