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

2024-01-22

我有一个UILabel我需要将其转换为UITextView因为原因。当我这样做时,尽管使用相同的(自定义)字体,但文本的位置并不相同。

我发现如果我设置:

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

这使得文本非常接近,但是如果我叠加UITextView超过顶部的UILabel,我看到文本定位随着每一个新行而变得更远。

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

我已经尝试过设置段落样式和最小/最大行高,但我无法完全匹配它。我不是打印机,所以我不一定理解文档中所有与字体相关的术语NSLayoutManager and NSTextContainer等等。

我只需要支持 iOS 7 及更高版本。

我不会切换到一些疯狂的基于 CoreText 的自定义小部件或使用一些随机的第三方库。如果有必要的话,我可以接受足够近的距离。但似乎应该有一些随机属性的组合来使它们的布局相同。


我找到了行间距的解决方案在这个链接 https://stackoverflow.com/questions/3760924/set-line-height-in-uitextview并将其应用于您的问题。通过调整我设法让它非常接近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];
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使 UITextView 布局文本与 UILabel 相同? 的相关文章

随机推荐