iOS - 如何预定义TextView行高

时间:2017-06-06 21:41:22

标签: ios swift3 uitextview

我已将某些UITextView声明为以下

lazy var inputTextView: UITextView = {
    let tv = UITextView()
    tv.tintColor = UIColor.darkGray
    tv.font = UIFont.systemFont(ofSize: 17)
    tv.backgroundColor = UIColor.white
    return tv
}()

我一直在搜索如何预定义此UITextView的行高,所以每当我写一个长文本时,当它到达行尾并转到在以下行中,间距将大于默认值。

我已尝试在UITextView声明中使用以下内容:

let style = NSMutableParagraphStyle()
style.lineSpacing = 40
let attributes = [NSParagraphStyleAttributeName : style]
tv.attributedText = NSAttributedString(string: "", attributes:attributes)

哪个会成为:

lazy var inputTextView: UITextView = {
    let tv = UITextView()
    tv.tintColor = UIColor.darkGray
    tv.font = UIFont.systemFont(ofSize: 17)
    tv.backgroundColor = UIColor.white
    let style = NSMutableParagraphStyle()
    style.lineSpacing = 40
    let attributes = [NSParagraphStyleAttributeName : style]
    tv.attributedText = NSAttributedString(string: "", attributes:attributes)
    return tv
}()

仅当我在attributedText属性中预先插入一些文本时才有效,但由于文本在开头是空的,因此不会使用这些属性,而是将其设置为默认值。

如果我在UITextView写作时,如何增加默认行高并保留它?

谢谢;)

2 个答案:

答案 0 :(得分:2)

那些正在寻找Swift 4版本的人

let spacing = NSMutableParagraphStyle()
spacing.lineSpacing = 7
spacing.alignment = .center
textView.typingAttributes = [NSAttributedStringKey.paragraphStyle.rawValue: spacing,
                             NSAttributedStringKey.font.rawValue: UIFont.systemFont(ofSize: 14)]

从iOS 11开始,Apple会在每个角色后清除文本属性。所以你必须在

中设置输入属性
func textViewShouldBeginEditing(_ textView: UITextView) -> Bool

答案 1 :(得分:1)

我解决了这个问题。问题是我不应该根据属性设置attributedText,因为当我们开始输入时,属性就消失了。

相反,我将typingAttributes设置为与我想要的相等,所以每当我输入属性时都不会迷路。

最终版本:

lazy var inputTextView: UITextView = {
    let tv = UITextView()
    tv.tintColor = UIColor.darkGray
    tv.font = UIFont.systemFont(ofSize: 17)
    tv.backgroundColor = UIColor.white
    let spacing = NSMutableParagraphStyle()
    spacing.lineSpacing = 4
    let attr = [NSParagraphStyleAttributeName : spacing]
    tv.typingAttributes = attr
    return tv
}()