gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 08:09:15 32 4
gpt4 key购买 nike

我有一个 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/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com