我已将某些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
写作时,如何增加默认行高并保留它?
谢谢;)
答案 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
}()