如何根据 NSTextView 的内容自动调整其大小?

Ram*_*tra 3 macos cocoa nstextview swift swift5

我正在制作一个应用程序,用户可以单击窗口上的任意位置,并NSTextView以编程方式在鼠标位置添加 a 。我已经让它与下面的代码一起工作,但我希望它NSTextView水平扩展,直到到达屏幕边缘,然后垂直增长。它目前具有固定宽度,当我添加更多字符时,文本视图垂直增长(如预期),但我也希望它水平增长。我怎样才能实现这个目标?

我已经尝试将isHorizontallyResizable和设置isVerticallyResizable为 true 但这不起作用。经过一段时间的研究,我发现了这个https://developer.apple.com/library/archive/documentation/Cocoa/Conceptual/TextStorageLayer/Tasks/TrackingSize.html但这对我来说也不起作用。

my 中的代码ViewController将其添加NSTextView到其视图中:

private func addText(at point: NSPoint) {     
    let textView = MyTextView(frame: NSRect(origin: point, size: CGSize(width: 150.0, height: 40.0)))
    view.addSubview(textView)       
}
Run Code Online (Sandbox Code Playgroud)

并且,MyTextView类如下所示:

class MyTextView: NSTextView {

    override func viewWillDraw() {
        
        isHorizontallyResizable = true
        isVerticallyResizable = true
        
        isRichText = false
    }
}
Run Code Online (Sandbox Code Playgroud)

我也看到了这个答案/sf/answers/3795970321/,但我不完全确定如何实现它。我已添加此代码片段MyTextView并使用它,如下所示:

override func didChangeText() {
    frame.size = contentSize
}
Run Code Online (Sandbox Code Playgroud)

但是,我认为我使用它是错误的。因此,任何帮助将不胜感激。

zrz*_*zka 5

我有点困惑,因为你要添加NSTextView到 aNSView的一部分NSViewController,然后你正在谈论屏幕宽度。这是您的Presentify - Screen Annotation应用程序的一部分吗?如果是,则您有一个全屏覆盖窗口,您可以从中获取大小(或从视图控制器的视图)。

view.bounds.size                // view controller's view size
view.window?.frame.size         // window size
Run Code Online (Sandbox Code Playgroud)

如果没有,并且您确实需要知道屏幕尺寸,请检查NSWindow& NSScreen

view.window?.screen?.frame.size // screen size
Run Code Online (Sandbox Code Playgroud)

不断增长的 NSTextView

没有指定任何窗口/视图控制器的视图调整大小行为。

view.window?.screen?.frame.size // screen size
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述