无法使用 UITextView 应用行距?

Posted

技术标签:

【中文标题】无法使用 UITextView 应用行距?【英文标题】:Can't apply line spacing with UITextView? 【发布时间】:2017-03-23 02:51:45 【问题描述】:

你对 UITextView 的行距有什么想法吗?我无法应用它。下面是我的代码。

import UIKit

class DetailViewController: UIViewController 
    @IBOutlet weak var itemTextView: UITextView!
    var txtString: String?
    var txtTitleBar:String?

    override func viewDidLoad() 
        super.viewDidLoad()
        //navigationController?.navigationItem.title = "Love"
        self.title = txtTitleBar

        //self.tabBarController?.navigationItem.title = "My Title"
        itemTextView.text = txtString
        itemTextView.font = UIFont(name: "Arial-Regular", size:20)
        itemTextView.font = .systemFont(ofSize: 25)
        (itemTextView.font?.lineHeight)! * 5
    

【问题讨论】:

(itemTextView.font?.lineHeight)! * 5 应该做什么? 它应用了行距但不能生效 不,这不适用行距。您读取行距值并将该值乘以 5。但您对结果无能为力。 现在它正在处理这个: let style = NSMutableParagraphStyle() style.lineSpacing = 20 let attributes = [NSParagraphStyleAttributeName : style] textView.attributedText = NSAttributedString(string: txtString, attributes: attributes)跨度> 您应该接受适当的答案,而不是张贴“谢谢”。 【参考方案1】:

您需要使用属性字符串并指定段落样式。例如:

let style = NSMutableParagraphStyle()
style.lineSpacing = 20
let attributes = [NSParagraphStyleAttributeName : style]
textView.attributedText = NSAttributedString(string: txtString, attributes: attributes)

有关属性字符串用法的更多详细信息,请参阅此 SO 答案:How do I make an attributed string using Swift?

【讨论】:

好的,但是如何使用户输入的文本保持相同的段落样式?我是否必须在每个 textFieldDidChange: 事件上执行您的代码? @linus_hologram 遇到同样的问题,你遇到过这个问题吗? @TomWicks 我最终在每个 textFieldDidChange: 事件中都使用了这段代码。据我所知,这是唯一的选择 使用textView.typingTextAttributes。这将允许您设置默认属性。【参考方案2】:

Xcode 9.2 Swift 4

let style = NSMutableParagraphStyle()
style.lineSpacing = 0
let attributes = [NSAttributedStringKey.paragraphStyle : style]
txtViewAbout.attributedText = NSAttributedString(string: txtViewAbout.text, attributes: attributes)

【讨论】:

【参考方案3】:

Xcode 10.1 Swift 4.2

let style = NSMutableParagraphStyle()
style.lineSpacing = 19
let attributes = [NSAttributedString.Key.paragraphStyle: style]
textView.attributedText = NSAttributedString(string: model.text, attributes: attributes)

【讨论】:

【参考方案4】:

使用 typingAttributes 将确保属性适用于用户输入的新文本。

    let style = NSMutableParagraphStyle()
    style.lineSpacing = 10
    let attributes = [NSAttributedString.Key.paragraphStyle : style )
    ]
    textView.typingAttributes = attributes

【讨论】:

以上是关于无法使用 UITextView 应用行距?的主要内容,如果未能解决你的问题,请参考以下文章

有啥方法可以改变 UIStackView 中 UITextView 的行距/边距/填充?

编译应用程序时UITextView无法输入[关闭]

无法在 UITextView 中使 URL 可点击

无法控制 UITextView 的宽度

xcode 6无法滚动长的uitextview

editplus 怎么调整行距。