一尘不染

如何从UILabel的第n行获取文本/字符串?

swift

是否有一种简单的方法可以从UILabel中的给定行中获取(或简单地显示)文本?

我的UILabel正确显示了我的文本并将其布置得很漂亮,但偶尔我需要能够仅显示某些行,但是显然我需要知道UILabel如何放置所有东西来做到这一点。

我知道可以使用子字符串轻松完成此操作,但是我需要知道该行的起点和终点。

或者,如果UILabel的框架存在某种偏移,则可以滚动UILabel,并隐藏我不想看到的其余内容。

我还没有发现任何可以轻松完成此操作的东西。有人有什么好主意吗?

谢谢

伊法


阅读 263

收藏
2020-07-07

共1个答案

一尘不染

我认为没有这样做的本地方法(例如“ takethenline”方法)。
我可以找出一个棘手的解决方案,但不确定是否是最佳解决方案。
您可以将标签分成单词数组。
然后,您可以循环数组并检查文本高度,直到像这样的单词:

NSString *texttocheck;
float old_height = 0;
int linenumber = 0;

for (x=0; x<[wordarray lenght]; x++) {
    texttocheck = [NSString stringWithFormat:@"%@ %@", texttocheck, [wordarray objectAtIndex:x]];

    float height = [text sizeWithFont:textLabel.font
                    constrainedToSize:CGSizeMake(textLabel.bounds.size.width,99999) 
                        lineBreakMode:UILineBreakModeWordWrap].height;

    if (old_height < height) {
        linenumber++;
    }
}

如果高度发生变化,则表示单词前有换行符。
我现在无法检查语法是否正确编写,因此您必须自己检查它。

2020-07-07