我有一个 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 - 如何使 UITextView 布局文本与 UILabel 相同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24500449/