在运行时从标签中获取字符串

时间:2019-05-27 12:14:17

标签: ios swift string xcode

我想获取在标签上可见并且具有换行模式.byClipping的字符串。 我的真实字符串是:-  “通过这种方式,您的API接口将变得美观漂亮,您无需将类的内部结构暴露给全世界。如果您在应用程序中的许多类中都使用了常量,那么有一个单独的有意义。 h和.m文件仅用于定义这些常量。”

但是在运行时,我得到:- “通过这种方式,您的API接口将变得非常漂亮,您无需将类的内部知识暴露给世界。

我想在运行时在变量中获取以下字符串。

1 个答案:

答案 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
}

在我看来,这或多或少地发挥了作用。如果我使用以...结尾的文本换行,则结果不正确。 还有一些优化可能很好。目前,我只使用完整的字符串并开始逐个字符地减去。也许在这里平分秋色会更好。

我仍然使用原始标签,因此应该考虑所有可能的参数,例如换行,字体大小,行...我修改了标签上的实际文本,然后将其重置为原始文本。

此操作正在进行时,应禁用可能的查看动画。