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

标签 ios objective-c uilabel uitextview

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

我发现如果我设置:

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

这会使文本非常接近,但是如果我将 UITextView 叠加在 UILabel 之上,我会看到文本位置随着每一个新行而变得更远。

Screen shot showing text drift.

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

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

我只需要支持 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];

Screen Shot

关于ios - 如何使 UITextView 布局文本与 UILabel 相同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24500449/

相关文章:

ios - 带有大图像的 UITableViewCell 不流畅

ios - 如何使用 Swift 以编程方式将 UIButton 中的文本左对齐,图像右对齐?

ios - Notification Observer 没有收到帖子

ios - XIB 的高度与多行 UILabel

ios - UILabel 的逐个字母动画?

ios - 如何在 iOS 中更改 OHAttributedLabel 的字体和字体大小?

ios - 调整 UILabel 内的文本

ios - 提交 iPhone 应用程序时用于 SKU # 的良好约定

iphone - 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:在实体NSSQLEntity CategoryDe​​tail id = 2中找不到“键路径父级”

ios - Xcode 在显示 "Block implicitly retains ' self 时表现得很奇怪';明确提及 'self' 以表明这是预期行为“警告