1

私は Three20 TTStyledTextLabel を使用しています。デフォルトのフォント (Helvetica) を別のフォントに変更すると、リンクと通常のテキストの間にある種の高さの違いが生じます。

次のコードは私の問題を示しています。

 #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

スクリーンショット

スクリーン ショットでは、最初のリンクが整列され、2 番目のリンクが整列されていないことがわかります。

どうすれば修正できますか?TTStyledTextLabel コードにバグがあると思います...

4

4 に答える 4

2

- (void)offsetFrame:(TTStyledFrame*)frame by:(CGFloat)y(TTStyledLayout.m:87) をコメントアウトしたところ、うまくいきました。もちろん、他のものを壊す可能性があります。

編集:次のコードもコメントアウトしました

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;
//    }
}

太字のフォントを削除します。

于 2010-02-19T01:38:51.767 に答える
1

これを書いている時点での three20 の最新バージョンでは、TTStyledLayout:345 に問題があるように思えます。

具体的には、以下を変更します。

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

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

...問題を解決するようです。

TT コードをしばらく見つめた後、URL の太さによって「行の高さ」ivar が膨らむため、行に URL がある場合にのみ問題が発生すると思います。three20 をフォークしたくない場合は、おそらくスタイルシートを変更して、URL の行の高さが残りのテキストの行の高さと変わらないようにすることができます。ただ、私は推測しています。

これについてもバグレポートを提出する予定です。

于 2010-07-30T01:25:15.513 に答える
0

これは優れているため、TTStyledBoldNodeclass のスタイルは変更されません。

元のコード:

if (!font) {
if ([elt isKindOfClass:[TTStyledLinkNodeclass]]
    || [elt isKindOfClass:[TTStyledBoldNodeclass]]) {
  font = self.boldFont;

} elseif ([elt isKindOfClass:[TTStyledItalicNodeclass]]) {
  font = self.italicFont;

} else {
  font = self.font;
}

}

固定コード:

if (!font) {
if ([elt isKindOfClass:[TTStyledBoldNodeclass]]) {
  font = self.boldFont;

} elseif ([elt isKindOfClass:[TTStyledItalicNodeclass]]) {
  font = self.italicFont;

} else {
  font = self.font;
}

}

于 2012-03-28T18:39:54.820 に答える
0

ソース コードを見ると、フォントは style: を使用して設定されていますself.font = TTSTYLEVAR(font)。ここで 2 つのことを行います

  1. メソッドをオーバーライドするカテゴリを作成しますinitWithFrame。フォント スタイルの変更がアプリ全体に影響しないself.font = TTSTYLEVAR(font)ように、名前を別の名前に変更する以外はすべて同じままにします。tableXFont
  2. tableXFontが定義されるように、独自のスタイルシートを作成して登録します。

これにより、three20 フォントとスタイルのカスタマイズを行う適切な方法への正しい道が示されるはずです。

于 2010-02-14T16:08:20.280 に答える