ios – 如何使UITextView布局文本与UILabel相同?

前端之家收集整理的这篇文章主要介绍了ios – 如何使UITextView布局文本与UILabel相同?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个UILabel,因为原因我需要转换为UITextView.当我这样做时,尽管使用相同的(自定义)字体,文本也不是相同的.

我发现如果我设置:

textView.textContainer.lineFragmentPadding = 0;
textView.textContainerInset = UIEdgeInsetsZero;

这得到的文本非常接近,但如果我将UITextView叠加在UILabel的顶部,我会看到文本定位与每条新行更远.

UILabel是绿色的,UITextView是黑色的.这是使用NSParagraphStyle将最小和最大行高设置为15.

我已经设置了段落样式和最小/最大行高,但是我还没有完全匹配.我不是打印机,所以我不一定了解NSLayoutManager和NSTextContainer等文档中的所有字体相关术语.

我只需要支持iOS 7及以上版本.

我不会转换到一些基于CoreText的自定义小部件,或者使用一些随机的第三方库.如果我必须,我可以接近足够好但是似乎应该有一些随机属性的组合使它们的布局相同.

解决方法

我采取解决方案找到线间距为 at this link,并将其应用于您的问题.我设法通过调整lineSpacing属性让它非常接近.我用HelveticaNeue 13号测试,并设法使其排队,如下面的屏幕截图所示.
textView.textContainer.lineFragmentPadding = 0;
textView.textContainerInset = UIEdgeInsetsZero;

NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init];

paragraphStyle.lineSpacing = -0.38;

NSDictionary *attrsDictionary =
@{ NSFontAttributeName: [UIFont fontWithName:@"HelveticaNeue" size:13.0f],NSParagraphStyleAttributeName: paragraphStyle};

textView.attributedText = [[NSAttributedString alloc] initWithString:textView.text attributes:attrsDictionary];

猜你在找的iOS相关文章