我想获取在标签上可见并且具有换行模式.byClipping的字符串。 我的真实字符串是:- “通过这种方式,您的API接口将变得美观漂亮,您无需将类的内部结构暴露给全世界。如果您在应用程序中的许多类中都使用了常量,那么有一个单独的有意义。 h和.m文件仅用于定义这些常量。”
但是在运行时,我得到:- “通过这种方式,您的API接口将变得非常漂亮,您无需将类的内部知识暴露给世界。
我想在运行时在变量中获取以下字符串。
答案 0 :(得分:1)
我不确定这是否本来可行。我最接近的想法是测试字符串大小和删除/添加字符。检查以下各项是否对您有用:
func findTextActuallyVisibleInLabel(_ label: UILabel) -> String? {
guard let originalText = label.text else { return nil }
var text = originalText
let labelSize = label.bounds
guard labelSize.height > 0 else { return text }
let bounds: CGRect = CGRect(x: 0.0, y: 0.0, width: labelSize.width, height: CGFloat.infinity)
while !text.isEmpty && label.textRect(forBounds: bounds, limitedToNumberOfLines: label.numberOfLines).height > labelSize.height {
text.removeLast()
label.text = text
}
label.text = originalText
return text
}
在我看来,这或多或少地发挥了作用。如果我使用以...
结尾的文本换行,则结果不正确。
还有一些优化可能很好。目前,我只使用完整的字符串并开始逐个字符地减去。也许在这里平分秋色会更好。
我仍然使用原始标签,因此应该考虑所有可能的参数,例如换行,字体大小,行...我修改了标签上的实际文本,然后将其重置为原始文本。
此操作正在进行时,应禁用可能的查看动画。