在 iOS 8 中,当 UITextView
应用于 lineHeightMultiple
时,我有一个普通的 NSMutableParagraphStyle
剪辑第一行的顶部,见下图:
似乎 lineHeightMultiple
除了影响后续行之外,还影响文本的第一行。
在 clipsToBounds = false
上设置 UITextView
至少可以使剪切部分显示出来,但是您可以从下图中看到,现在文本的顶部显然位于其框架上方:
我可以通过在有问题的 UITextView
上设置顶部约束来补偿 clipsToBounds = false
来解决这个问题,但这对我来说就像一个黑客。
我还尝试使用 WKWebView
来处理违规文本,并仅设置 css line-height
属性,效果很好。但是,当涉及到 UITextView 时,我肯定缺少一些东西。
此外,根据文档,将段落样式的 lineSpacing
设置为小于 0 没有任何影响:
The distance in points between the bottom of one line fragment
and the top of the next.
**This value is always nonnegative.**
This value is included in the line fragment heights in the
layout manager.
我也尝试过设置
contentInset
的 UITextView
以及使用系统字体,两者都没有影响。我此设置的示例代码如下:
let text = "THIS IS A MULTILINE RUN OF TEXT"
let font = UIFont(name: "MyFontName", size: 31.0)!
// let font = UIFont.systemFontOfSize(31.0)
let paragraph = NSMutableParagraphStyle()
paragraph.lineHeightMultiple = 0.75
paragraph.alignment = NSTextAlignment.Center
let attributes = [
NSParagraphStyleAttributeName: paragraph,
NSFontAttributeName: font
]
titleView.attributedText = NSAttributedString(string: text, attributes: attributes)
// titleView.contentInset = UIEdgeInsets(top: 50.0, left: 0.0, bottom: 0.0, right: 0.0)
titleView.clipsToBounds = false
有没有人遇到过这个问题并克服了这个问题,或者是顶级约束破解是唯一的出路?
最佳答案
我遇到过同样的问题。
我使用 NSBaselineOffsetAttributeName 补偿了它。
你应该使用:
let attributes = [
NSParagraphStyleAttributeName: paragraph,
NSFontAttributeName: font,
NSBaselineOffsetAttributeName: -5
]
您还必须设置较低的段落lineHeightMultiple。
有点棘手,但它有效。
关于ios - UITextView lineHeightMultiple Clips Top, first line, of Text,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30845705/