首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >忽略NSParagraphStyle行距

忽略NSParagraphStyle行距
EN

Stack Overflow用户
提问于 2012-09-24 17:46:17
回答 6查看 41K关注 0票数 24

一个简单的测试失败了:创建一个只有一个子视图(UITextView)的新项目,并放入以下内容:

代码语言:javascript
复制
- (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}];
}

行距与不存在属性的行距相同。有什么能让它成功工作的吗?我放了可笑的数字只是为了表明它不会改变...

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 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。

票数 24
EN

Stack Overflow用户

发布于 2012-10-06 22:32:38

我不知道这对您的目的是否足够,但我可以通过设置最小和最大行高来调整行距。此外,为了使用字体,我将其放入文本视图的font属性中,而不是在属性字典中将其作为NSFontAttributeName的值传递。(也许这部分没有(很好地)记录下来?)

关于你的属性

lineSpacing是从一行的底部到上行的底部计算的,该空间被限制为介于minimumLineHeightmiximumLineHeight之间的值。我想说的是,也许属性中的某些值正在取消或覆盖其他值。

此外,如果只需要调整行间的间距,则可能不需要使用paragraphStyle.lineHeightMultiple :)

代码

这对我很有效:

代码语言:javascript
复制
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];

补充说明

在同一行中,似乎存在日语/中文以及其他字符与字母字符混合的情况。它将使这条线具有更大的行距,以解决您需要像我一样设置最小和最大线高的问题。您可以在不带属性的情况下呈现我的示例时看到这个问题。

票数 23
EN

Stack Overflow用户

发布于 2012-12-05 17:22:38

设置maximumLineHeight似乎为我解决了这个问题;

代码语言:javascript
复制
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];

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12562506

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档