如何垂直对齐textView中的文本? (迅速)

Posted

技术标签:

【中文标题】如何垂直对齐textView中的文本? (迅速)【英文标题】:How to align text inside textView vertically? (Swift) 【发布时间】:2020-10-01 20:30:51 【问题描述】:

我发现这在链接到 viewController 的 UITextView 上非常有效,但我不知道如何让它在单独的类中创建的 UITextView 上正常工作。

https://***.com/a/41387780/8635708

我希望视图高度为三个单位(字符高度)并且内容垂直居中。

会发生这样的事情:

另一方面,如果我将视图设置为 4 个单位高,它看起来不错 - 但我没有空间。

这是我所做的(这似乎适用于单行)。

class TestClass: UIView 

    var titleView1 = UITextView()
    var titleView2 = UITextView()

    override func layoutSubviews() 
        titleView1.centerVertically()
        titleView2.centerVertically()
    


    override func draw(_ rect: CGRect) 
        super.draw(rect)

        let h = 3 * GlobalConstants.fontSize // 3 * 14 = 42

        var title = "Single Line"
        var bounds = CGRect(x: 10, y: 10, width: 100, height: h)
        displayTitle(str: title, column: &titleView1, bounds: bounds)

        title = "First Line\nSecondLine"
        bounds = CGRect(x: 120, y: 10, width: 100, height: h)
        displayTitle(str: title, column: &titleView2, bounds: bounds)
    


    func displayTitle(str: String, column: inout UITextView, bounds: CGRect) 
        
        let view = UITextView(frame: bounds)
        
        let attributes: [NSAttributedString.Key: Any] = [
            .foregroundColor: UIColor.blue,
            .font: UIFont.italicSystemFont(ofSize: 16)
        ]
        let attributedText = NSMutableAttributedString(string: str, attributes: attributes)

        view.attributedText = attributedText
        view.textAlignment = .center

        view.centerVertically()

        self.autoresizesSubviews = true
        self.addSubview(view)

    


我不相信可以简单地使用NSAttributedString 完成垂直对齐,但如果可能,请告诉我如何操作!

谢谢!

【问题讨论】:

这是否可以由用户编辑?那么,当用户键入时,文本会随着新行的添加而垂直移动? 不,它们将是保持固定的表的标题。 不可编辑?嗯...那为什么要使用UITextViewUILabel 自动垂直居中文本... 当然!最初,我将标题和表格中的所有数据放在一起,但将标题分离出来进行格式化......有时你必须上来看看大图!谢谢! (再次!) 除了那个简单的解决方案,为什么上面的方法不起作用?如果文本确实发生了变化怎么办? 【参考方案1】:

我将行数设置为 0 并使用“\n”向上或向下移动文本。

非常容易使用!

"Single Line" + "\n\n\n" 将文本向上移动 3 行 "\n\n\n" + "Single Line" 将文本下移 3 行

【讨论】:

以上是关于如何垂直对齐textView中的文本? (迅速)的主要内容,如果未能解决你的问题,请参考以下文章

Android中TextView的水平和垂直居中文本

如何垂直对齐嵌套在无序列表中的锚元素内的文本

当 TextView 是匹配约束时,如何对齐 TextView 中的文本?

如何将 TextView 容器内的文本对齐到顶部? [复制]

如何将文本与图标字体垂直对齐?

如何使文本在 Android TextView 向右对齐