我正在使用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代码中存在一个错误......
答案 0 :(得分: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;
// }
}
摆脱粗体字。
答案 1 :(得分:1)
在撰写本文时,在最新版本的three20中,我觉得问题出现在TTStyledLayout:345。
具体来说,改变:
[self offsetFrame:frame by:(_lineHeight - (frame.height - font.descender))];
到
[self offsetFrame:frame by:(_lineHeight - (frame.height /* - font.descender */ ))];
......似乎解决了这个问题。
在盯着TT代码一段时间后,我相信只有当一行上有网址时你的问题才会出现,因为网址粗体会夸大一些“行高”ivar。如果您不想fork three20,您可能只需更改样式表以确保URL的行高与其他文本的行高无异。不过,我只是在猜测。
我计划提交有关此事的错误报告。
答案 2 :(得分:0)
如果查看source code,则使用样式self.font = TTSTYLEVAR(font)
设置字体。我会在这里做两件事
initWithFrame
方法的类别。除了将self.font = TTSTYLEVAR(font)
重命名为tableXFont
以外的其他内容之外,请保持一致,以便更改字体样式不会影响整个应用。tableXFont
。这应该让你走上正确的道路,以正确的方式进行三种字体和样式定制
答案 3 :(得分: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;
}
}