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
的方式外,此答案与公认的答案相同。