如何调整TTStyledTextLabel的宽度?

发布于 2024-10-10 13:01:45 字数 232 浏览 1 评论 0原文

我正在 iOS 上实现一个 IM 应用程序。我发现 Three20 库有一个 TTStyledTextLabel,它提供了很酷的功能,例如显示图像和 url 链接。不过,我想将 TTStyledTextLabel 嵌入到消息气泡中(就像 iPhone 附带的短信应用程序一样),其中我需要标签根据文本长度调整其大小。我发现TTStyledTextLabel可以根据宽度调整其高度,但我不知道当文本很短并且无法填满整行时如何使其水平收缩。有什么建议吗?

I am implementing an IM app on iOS. I found that three20 library has a TTStyledTextLabel which provides cool features like showing images and url links. However I want to embed the TTStyledTextLabel in a message bubble (just like the sms app shipped with iphone does), where I need the label to adjust its size according to the text length. I found that TTStyledTextLabel can adjust its height according to its width, but I don't know how to make it shrink horizontally when the text is very short and can't fill up a whole line. Any suggestions?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

岛徒 2024-10-17 13:01:45

我认为我有一个稍微更好的解决方案:我获取 ttstyledtext 的 rootFrame 并迭代其同级框架以找到最大宽度。

它的工作原理如下:

    TTStyledTextLabel* label = [[TTStyledTextLabel alloc] init];
    label.text = [TTStyledText textFromXHTML:myTextToBeDisplayed];
    [label sizeToFit];
    CGFloat maxWidth = 0;
    TTStyledFrame *f = label.text.rootFrame;
    while (f) {
        int w = f.x + f.width;
        if (w > maxWidth) {
            maxWidth = w;
        }
        f = f.nextFrame;
    }
    return CGSizeMake(maxWidth, label.height);

I think I have a slightly better solution: I get the rootFrame of the ttstyledtext and iterate over its sibling frames to find the max width.

It works like this:

    TTStyledTextLabel* label = [[TTStyledTextLabel alloc] init];
    label.text = [TTStyledText textFromXHTML:myTextToBeDisplayed];
    [label sizeToFit];
    CGFloat maxWidth = 0;
    TTStyledFrame *f = label.text.rootFrame;
    while (f) {
        int w = f.x + f.width;
        if (w > maxWidth) {
            maxWidth = w;
        }
        f = f.nextFrame;
    }
    return CGSizeMake(maxWidth, label.height);
巴黎夜雨 2024-10-17 13:01:45

我尝试通过将尺寸中的宽度参数增量传递给 sizeToFit 并查看结果高度来给出尺寸是否合适的提示。 来说并不是一个优雅的解决方案

但这对于 (int index = 100;index < 320;index=index+30)

{
标签.宽度=x;
if (标签高度 < 20)
休息;

}

I tried doing it by incrementally passing the width parameter in size to sizeToFit and looking at the resulting height to give cues in terms of whether the size is ok. But this is not a elegant solution

for (int index = 100; index < 320; index= index+30)

{
label.width = x;
if (label.height < 20)
break;

}

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文