在iOS 8中,我有一个香草UITextView
,当lineHeightMultiple
应用于NSMutableParagraphStyle
lineHeightMultiple
时会剪切第一行的顶部,见下图:< / p>
似乎clipsToBounds = false
除了后续行之外还影响第1行文本。
在UITextView
上设置UITextView
至少会启用剪裁的部分,但您可以从下面的图片中看到,现在文字的顶部明显高于它{s}帧:
我可以通过在有问题的clipsToBounds = false
上设置顶部约束来补偿WKWebView
来解决此问题,但这对我来说就像是黑客攻击。
我还尝试使用line-height
作为违规文本,只设置了css lineSpacing
属性,这样就可以了。在UITextView中,必须有一些我缺少的东西。
此外,根据文档,将段落样式的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.
设置为小于0没有任何影响:
contentInset
我还尝试设置UITextView
的{{1}}以及使用系统字体,两者都没有影响。
此设置的示例代码如下:
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
有没有人遇到过这个并且克服了或者是最重要的约束黑客唯一的方法去哪了?
答案 0 :(得分:3)
我遇到了同样的问题。
我使用NSBaselineOffsetAttributeName补偿它。
您应该使用:
let attributes = [
NSParagraphStyleAttributeName: paragraph,
NSFontAttributeName: font,
NSBaselineOffsetAttributeName: -5
]
您还必须设置较低的paragraph.lineHeightMultiple。
有点棘手,但确实有效。
答案 1 :(得分:0)
Cooliopas是对的,但我最终在标签扩展中使用它,并且需要更适合我的应用程序中许多不同大小的文本。我发现保持文本垂直居中的基线调整是文本高度的10%。
let attrString = NSMutableAttributedString(string: newText)
let style = NSMutableParagraphStyle()
style.alignment = self.textAlignment
style.lineSpacing = 1.0
style.lineHeightMultiple = 0.75
var baselineOffset : CGFloat = -5 //-5 is a default for this in case there is no attributedText size to reference
if let size = self.attributedText?.size(){
baselineOffset = size.height * -0.1
} else {
NSLog("attributedText = nil, setting lineHeightMultiple to -5 as a default for ", newText)
}
attrString.addAttribute(NSParagraphStyleAttributeName, value: style, range: NSMakeRange(0, attrString.length))
attrString.addAttribute(NSBaselineOffsetAttributeName, value: baselineOffset, range: NSMakeRange(0, attrString.length))
self.clipsToBounds = false
self.attributedText = attrString
答案 2 :(得分:0)
替代方法-使用带有两个标签的堆栈视图,并将堆栈视图间距设置为顶部标签的字体的降序。