swift 如何使用NSTextView从右侧开始绘制垂直文本?

093gszye  于 2023-06-21  发布在  Swift
关注(0)|答案(1)|浏览(96)

日语或中文等语言可以垂直书写,从页面的顶部 * 右 * 开始,向下书写,当您到达底部时,您可以向上并转到 * 左侧 * 的下一行。
NSTextView似乎支持这一开箱即用

textView.setLayoutOrientation(.vertical)

还有一个故事板选项。
虽然这似乎适用于单个文本视图(文本确实从文本视图的右上角开始),但当我试图使文本视图可滚动时,它不起作用,将文本视图放在滚动视图中。
例如,当我试图在故事板中添加“可滚动文本视图”时,由于某种原因,NSTextView没有填满整个滚动视图,如图中的白色方块所示:

(Note我添加的唯一约束是将滚动视图的四个边缘固定到窗口)
这是不期望的。文本视图应该填满整个滚动视图,以便文本从窗口的最右边开始。当我拖动窗口的右侧来展开文本视图时,它根本不会展开。

只有在文本视图中输入更多文本时,文本视图才会展开。
如果文本视图具有水平方向,则无法看到这些行为。
我做错了什么?是否不支持可滚动的垂直文本?
我还尝试以编程方式添加文本视图,但出现了相同的行为

let scrollView = NSTextView.scrollableTextView()
view.addSubview(scrollView)

scrollView.translatesAutoresizingMaskIntoConstraints = false
NSLayoutConstraint.activate([
    scrollView.topAnchor.constraint(equalTo: view.topAnchor),
    scrollView.bottomAnchor.constraint(equalTo: view.bottomAnchor),
    scrollView.leftAnchor.constraint(equalTo: view.leftAnchor),
    scrollView.rightAnchor.constraint(equalTo: view.rightAnchor),
])

let textView = scrollView.documentView as! NSTextView

textView.textStorage?.setAttributedString(
    NSAttributedString(string: "あいうえおかきくえこ", attributes: [
        .font: NSFont.systemFont(ofSize: 25),
        .foregroundColor: NSColor.textColor
    ])
)

textView.setLayoutOrientation(.vertical)
vuktfyat

vuktfyat1#

首先考虑横向布局中的所有内容。然后通过setLayoutOrientation(.vertical)将整个textview顺时针旋转90度。然后,垂直版本的字体(如果存在)将替换相应的水平版本,其中右上字形(大多数CJK表意文字,全角字母数字,表情符号等)逆时针旋转90度,而其余字形保持横向。因此,垂直地从上到下和从右到左等效于(旋转)水平地从左到右和从上到下。其他一切都以类似的方式转变:(伪)垂直布局中的上/下/左/右边缘实际上是原始水平布局中的左/右/下/上边缘;(伪)垂直布局中的水平滚动实际上是原始水平布局中的垂直滚动。在大多数情况下,如果文档中没有特别提到垂直布局,则应假设这些术语都指原始的水平布局。

相关问题