我使用的是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

在屏幕截图中,您可以看到第一个链接已对齐,而第二个链接未对齐
我该如何修复它?我认为在TTStyledTextLabel代码中有一个错误...
发布于 2010-02-19 09:38:52
我刚刚注释掉了- (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-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报告。
发布于 2010-02-15 00:08:20
如果您查看样式,字体是使用source code:self.font = TTSTYLEVAR(font)设置的。我会在这里做两件事
initWithFrame方法的类别。保留所有内容不变,只是将self.font = TTSTYLEVAR(font)重命名为其他名称,如tableXFont,以便更改字体样式不会影响整个应用程序。tableXFont。这将为您提供正确的方法来进行three20字体和样式自定义
https://stackoverflow.com/questions/2261641
复制相似问题