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

Swift 如何根据NSTextView的内容自动调整其大小?,swift,macos,cocoa,swift5,nstextview,Swift,Macos,Cocoa,Swift5,Nstextview,我正在制作一个应用程序,用户可以单击窗口上的任何位置,并在鼠标位置以编程方式添加NSTextView。我已经让它使用下面的代码,但是我希望这个NSTextView水平扩展,直到它到达屏幕边缘,然后垂直扩展。它目前有一个固定的宽度,当我添加更多字符时,文本视图会垂直增长(正如预期的那样),但我也希望它水平增长。我怎样才能做到这一点 我已尝试将isHorizontallyResizable和isVerticallyResizable设置为true,但这不起作用。经过一段时间的研究,我发现了这个,但这

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

我已尝试将
isHorizontallyResizable
isVerticallyResizable
设置为true,但这不起作用。经过一段时间的研究,我发现了这个,但这对我也不起作用

在myViewController中编码,将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)       
}
而且,
MyTextView
类如下所示:

class MyTextView: NSTextView {

    override func viewWillDraw() {
        
        isHorizontallyResizable = true
        isVerticallyResizable = true
        
        isRichText = false
    }
}
我也看到了这个答案,但我不完全确定如何实施它。我在
MyTextView
中添加了此代码段,并将其用作:

override func didChangeText() {
    frame.size = contentSize
}
然而,我认为我用错了。因此,任何帮助都将不胜感激。

我终于让它工作了(除了一件小事)。苹果的代码是这里的关键,但不幸的是,他们没有完整地描述代码

以下代码适用于我:

class MyTextView: NSTextView {
    override func viewWillDraw() {
        // for making the text view expand horizontally
        textContainer?.heightTracksTextView = false
        textContainer?.widthTracksTextView = false
        textContainer?.size.width = 10000.0
        maxSize = NSSize(width: 10000.0, height: 10000.0)
        isHorizontallyResizable = true
        isVerticallyResizable = true

        isRichText = false
    }
}
我还没有弄清楚的一件小事是限制水平扩展,直到到达屏幕边缘。现在,它继续扩展,甚至超出屏幕宽度,反过来,文本隐藏在屏幕宽度之后


我想如果我能以某种方式获得屏幕窗口宽度,那么我可以用屏幕宽度(减去文本视图与左边缘的距离)替换
10000.0
,并且我可以限制水平扩展,直到屏幕边缘。话虽如此,保持它
10000.0
不会影响苹果文档中描述的性能。

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

view.bounds.size//查看控制器的视图大小
view.window?.frame.size//窗口大小
如果没有,并且您确实需要知道屏幕大小,请检查
NSWindow
&
NSScreen

view.window?.screen?.frame.size // screen size
正在增长的NSTextView 没有指定任何窗口/视图控制器的视图大小调整行为

导入可可粉
类BorderedTextView:NSTextView{
重写函数绘图(uTyrect:NSRect){
超级绘图(直接绘图)
let path=NSBezierPath(rect:bounds)
NSColor.red.setStroke()
path.stroke()
}
}
类ViewController:NSViewController{
重写函数鼠标(带有事件:NSEvent){
//将点转换为视图坐标
let point=view.convert(event.locationInWindow,from:nil)
//初始尺寸
let size=CGSize(宽:100,高:25)
//最大文本视图宽度

让maxWidth=view.bounds.size.width-point.x//注意:除了我们计算
maxWidth
的方式外,此答案与公认的答案相同。