一个简单的测试失败了:创建一个只有一个子视图(UITextView)的新项目,并放入以下内容:
- (void)viewDidLoad
{
[super viewDidLoad];
NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init];
paragraphStyle.lineHeightMultiple = 50.f;
paragraphStyle.lineSpacing = 100.f;
paragraphStyle.minimumLineHeight = 200.f;
paragraphStyle.maximumLineHeight = 500.f;
UIFont *font = [UIFont fontWithName:@"AmericanTypewriter" size:24.f];
self.textView.attributedText = [[NSAttributedString alloc] initWithString:
@"This is a test.\n Will I pass?" attributes:
@{NSParagraphStyleAttributeName : paragraphStyle, NSFontAttributeName : font}];
}行距与不存在属性的行距相同。有什么能让它成功工作的吗?我放了可笑的数字只是为了表明它不会改变...
发布于 2012-12-17 00:48:10
这是NSHTMLWriter中的一个错误,它是UITextView用来将attributedText转换为超文本标记语言的私有类。在内部,它通过UIWebDocumentView显示这个超文本标记语言。在我的文章中阅读更多关于UITextView内部工作原理的内容:http://www.cocoanetics.com/2012/12/uitextview-caught-with-trousers-down/
这个问题来自于CSS速记字体中一个很容易被忽略的特性。如果您使用字体速记指定像素大小,则会同时设置字体大小和行高。由于NSHTMLWriter将字体放在行高之后,这会导致行高被字体大小抵消。
请在这里查看我的雷达,其中包括对该错误的完整分析:http://www.cocoanetics.com/2012/12/radar-uitextview-ignores-minimummaximum-line-height-in-attributed-string/
我建议你也提交一份错误报告,并提到我的雷达#12863734。
发布于 2012-10-06 22:32:38
我不知道这对您的目的是否足够,但我可以通过设置最小和最大行高来调整行距。此外,为了使用字体,我将其放入文本视图的font属性中,而不是在属性字典中将其作为NSFontAttributeName的值传递。(也许这部分没有(很好地)记录下来?)
关于你的属性
lineSpacing是从一行的底部到上行的底部计算的,该空间被限制为介于minimumLineHeight和miximumLineHeight之间的值。我想说的是,也许属性中的某些值正在取消或覆盖其他值。
此外,如果只需要调整行间的间距,则可能不需要使用paragraphStyle.lineHeightMultiple :)
代码
这对我很有效:
NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init];
paragraphStyle.minimumLineHeight = 35.f;
paragraphStyle.maximumLineHeight = 35.f;
UIFont *font = [UIFont fontWithName:@"AmericanTypewriter" size:18.f];
NSString *string = @"This is a test.\nWill I pass?\n日本語のもじもあるEnglish\nEnglish y Español";
NSDictionary *attributtes = @{
NSParagraphStyleAttributeName : paragraphStyle,
};
self.textView.font = font;
self.textView.attributedText = [[NSAttributedString alloc] initWithString:string
attributes:attributtes];
补充说明
在同一行中,似乎存在日语/中文以及其他字符与字母字符混合的情况。它将使这条线具有更大的行距,以解决您需要像我一样设置最小和最大线高的问题。您可以在不带属性的情况下呈现我的示例时看到这个问题。
发布于 2012-12-05 17:22:38
设置maximumLineHeight似乎为我解决了这个问题;
CGFloat fontSize = 22.f;
titleLabel.font = [UIFont boldSystemFontOfSize:fontSize];
NSMutableParagraphStyle *paragraphStyle = [[[NSMutableParagraphStyle alloc] init] autorelease];
paragraphStyle.maximumLineHeight = fontSize/2;
titleLabel.attributedText = [[[NSAttributedString alloc]
initWithString:@"This is a test.\nWill I pass?"
attributes: @{ NSParagraphStyleAttributeName : paragraphStyle,
NSFontAttributeName : titleLabel.font}]
autorelease];

https://stackoverflow.com/questions/12562506
复制相似问题