首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >更改默认字体时链接和常规文本之间的TTStyledTextLabel偏移量

更改默认字体时链接和常规文本之间的TTStyledTextLabel偏移量
EN

Stack Overflow用户
提问于 2010-02-14 23:51:02
回答 4查看 1.3K关注 0票数 1

我使用的是Three20 TTStyledTextLabel,当我将默认字体(Helvetica)更改为其他字体时,它会在链接和常规文本之间产生某种高度差异

下面的代码演示了我的问题:

代码语言:javascript
复制
 #import <Three20/Three20.h>


    @interface TestController : UIViewController {

    }

    @end


    @implementation TestController
    -(id)init{
        self = [super init];
        TTStyledTextLabel* label = [[[TTStyledTextLabel alloc]   initWithFrame:CGRectMake(0, 0, 320, 230)] autorelease];
        label.text = [TTStyledText textFromXHTML:@"<a href=\"aa://link1\">link</a> text" lineBreaks:YES URLs:YES];
        [label setFont:[UIFont systemFontOfSize:16]];
        [[self view] addSubview:label];


        TTStyledTextLabel* label2 = [[[TTStyledTextLabel alloc]   initWithFrame:CGRectMake(0, 230, 320, 230)] autorelease];
        label2.text = [TTStyledText textFromXHTML:@"<a href=\"aa://link1\">link2</a> text2" lineBreaks:YES URLs:YES];
        [label2 setFont:[UIFont fontWithName:@"HelveticaNeue" size:16]];
        [[self view] addSubview:label2];
        return self;
    }
    @end

在屏幕截图中,您可以看到第一个链接已对齐,而第二个链接未对齐

我该如何修复它?我认为在TTStyledTextLabel代码中有一个错误...

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-02-19 09:38:52

我刚刚注释掉了- (void)offsetFrame:(TTStyledFrame*)frame by:(CGFloat)y (TTStyledLayout.m:87),它做到了这一点。当然,它可能会破坏其他东西。

编辑:我还注释掉了以下代码

代码语言:javascript
复制
if (!font) {
//    if ([elt isKindOfClass:[TTStyledLinkNode class]]
//        || [elt isKindOfClass:[TTStyledBoldNode class]]) {
//      font = self.boldFont;
//    } else if ([elt isKindOfClass:[TTStyledItalicNode class]]) {
//      font = self.italicFont;
//    } else {
      font = self.font;
//    }
}

去掉粗体字体。

票数 2
EN

Stack Overflow用户

发布于 2010-07-30 09:25:16

在撰写本文时,在最新版本的three20中,问题似乎存在于TTStyledLayout:345。

具体地说,更改:

[self offsetFrame:frame by:(_lineHeight - (frame.height - font.descender))];

[self offsetFrame:frame by:(_lineHeight - (frame.height /* - font.descender */ ))];

..。似乎解决了这个问题。

在盯着TT代码看了一段时间后,我相信只有当一行上有URL时,您的问题才会出现,因为URL的粗体会膨胀一些“行高”ivar。如果您不想派生three20,您可能只需更改样式表,以确保URL的行高与其余文本的行高相同。不过,我只是在猜测。

我也计划提交一份关于这方面的bug报告。

票数 1
EN

Stack Overflow用户

发布于 2010-02-15 00:08:20

如果您查看样式,字体是使用source codeself.font = TTSTYLEVAR(font)设置的。我会在这里做两件事

  1. 创建一个覆盖initWithFrame方法的类别。保留所有内容不变,只是将self.font = TTSTYLEVAR(font)重命名为其他名称,如tableXFont,以便更改字体样式不会影响整个应用程序。
  2. 创建并注册您自己的样式表,以便定义tableXFont

这将为您提供正确的方法来进行three20字体和样式自定义

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2261641

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档