Ios 从运行时可见的标签获取字符串

Ios 从运行时可见的标签获取字符串,ios,swift,string,xcode,Ios,Swift,String,Xcode,我想得到在我的标签上可见的字符串,并具有换行模式。通过剪切。 我真正的字符串是:- “这样,您的API界面将非常漂亮,您不会向外界公开类的内部内容。如果您的应用程序中有很多类都使用常量,那么有一个单独的.h和.m文件来定义这些常量是有意义的。” 但在运行时,我得到:- 通过这种方式,您的API接口将非常漂亮,您不会向外界公开类的内部结构。如果您有常量 我想在运行时在变量中获取以下字符串。我不确定这是否本机可行。我最接近的想法是测试字符串大小和删除/添加字符。检查以下各项是否适用于您: func

我想得到在我的标签上可见的字符串,并具有换行模式。通过剪切。 我真正的字符串是:- “这样,您的API界面将非常漂亮,您不会向外界公开类的内部内容。如果您的应用程序中有很多类都使用常量,那么有一个单独的.h和.m文件来定义这些常量是有意义的。”

但在运行时,我得到:- 通过这种方式,您的API接口将非常漂亮,您不会向外界公开类的内部结构。如果您有常量


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

我不确定这是否本机可行。我最接近的想法是测试字符串大小和删除/添加字符。检查以下各项是否适用于您:

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
}
对我来说,这似乎或多或少起到了作用。如果使用以
结尾的换行符,则结果不正确。 此外,一些优化可能是不错的;目前我只使用完整的字符串,并开始逐个字符进行减法。也许平分会更好

我仍然使用原始标签,所以它应该考虑所有可能的参数,如包装,字体大小,线条。。。我修改标签上的实际文本,然后将其重置为原始文本


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

另外,请共享您正在获取的输出的屏幕截图。您是否无法像这样获取整个字符串?让myString=yourLable.text?label.text可以工作。lineBreakMode仅用于显示目的。确保标签上的文字设置正确。