[英]TTStyledTextLabel offset between link and regular text when changing from default font
我正在使用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代码中存在错误...
我刚刚评论了- (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;
// }
}
摆脱粗体。
在撰写本文时,在最新版本的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的行高与其余文本的行高没有区别。 我只是在推测。
我也计划提交有关此问题的错误报告。
如果您查看源代码 ,则使用以下样式设置字体: self.font = TTSTYLEVAR(font)
。 我会在这里做两件事
initWithFrame
方法的类别。 离开一切,除了重命名相同self.font = TTSTYLEVAR(font)
到别的东西像tableXFont
使更改字体样式不会影响你的整个应用程序。 tableXFont
。 这应该为您设置正确的方法以正确地进行Three20字体和样式自定义
这样更好,因此不会改变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;
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.