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

i_a*_*orf 20 objective-c uitextview uilabel ios

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

我发现如果我设置:

textView.textContainer.lineFragmentPadding = 0;
textView.textContainerInset = UIEdgeInsetsZero;
Run Code Online (Sandbox Code Playgroud)

这使文本非常接近,但如果我叠加UITextView在上面UILabel,我看到文本定位与每个新行相距更远.

屏幕截图显示文本漂移.

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

我已经设置了段落样式和最小/最大行高,但我还是无法完全匹配它.我不是一个打印机,所以我不一定明白所有的字体相关条款的文件在NSLayoutManagerNSTextContainer和所有.

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

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

Sto*_*nz2 15

在此链接中找到了行间距的解决方案,并将其应用于您的问题.通过调整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];
Run Code Online (Sandbox Code Playgroud)

屏幕截图