如何禁用 NSTextView 的自动换行?
NSTextView 默认进行自动换行。我怎样才能禁用这个功能? 我正在制作一个 JSON 代码查看器,所以我必须禁用它。
NSTextView does word-wrap by default. How can I disable this?
I'm making a JSON code viewer, so I have to disable this.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
首先,本文档解释了原因和方式 - https://developer.apple.com/library/archive/documentation/Cocoa/Conceptual/TextStorageLayer/Tasks/TrackingSize.html#//apple_ref/doc/uid/20000927- CJBBIAAF
我从以下位置得到了解决方案: http:// lists.apple.com/archives/cocoa-dev/2008/May/msg02396.html
您必须将 NSTextView 的最大宽度设置为非常大的数字才能使其正常工作。 (只需复制最大高度)
并启用 NSScrollView 的水平滚动,它是 NSTextView 的超级视图。
请参阅这些图片:
http://www.flickr.com/photos/47601728@N06 /4759470529/
http://www.flickr.com/photos/47601728@N06/4759470533/
更新
我发现我的旧示例代码不足以使其完全正常工作。 (因为SDK版本?)
还
这是我的完整源代码片段,它在 OSX 10.8 SDK 中禁用自动换行。
更新 2
现在 Apple 正在提供官方指南< /a> 正确创建
NSTextView
。我希望这有帮助。更新 3
我在 Github 上发布了一个 示例项目。具体实现请参见此页面: https:// /github.com/Eonil/CocoaProgrammaticHowtoCollection/blob/master/ComponentUsages/TextView/ExampleApplicationController.swift?ts=4
这是示例项目中的代码片段。
First, this document explains why and how -- https://developer.apple.com/library/archive/documentation/Cocoa/Conceptual/TextStorageLayer/Tasks/TrackingSize.html#//apple_ref/doc/uid/20000927-CJBBIAAF
I got solution from: http://lists.apple.com/archives/cocoa-dev/2008/May/msg02396.html
You have to set NSTextView's maximum width to very large number to make this work correctly. (Just copy maximum height)
And enable horizontal scrolling of NSScrollView which is superview of the NSTextView.
See these pictures:
http://www.flickr.com/photos/47601728@N06/4759470529/
http://www.flickr.com/photos/47601728@N06/4759470533/
Update
I discovered my old sample code was insufficient to make it fully work correctly. (because of SDK version?)
Also
Here's my full source code snippet which disables word-wrap in OSX 10.8 SDK.
Update 2
Now Apple is providing an official guide to create
NSTextView
correctly. I hope this helps.Update 3
I posted an example project on Github. See this page for specific implementation: https://github.com/Eonil/CocoaProgrammaticHowtoCollection/blob/master/ComponentUsages/TextView/ExampleApplicationController.swift?ts=4
Here's a code snippet from the sample project.
仅 Eonil 接受的答案中给出的三行对我来说不起作用,生成的文本视图不会水平滚动,因此无法看到长行的剪裁部分。
引用的 cocoa-dev 线程中的完整代码片段确实产生了正确的结果。具体来说,这组步骤:
The three lines given in the accepted answer by Eonil alone did not work for me, the resulting text view did not scroll horizontally and therefore there was no way to see the clipped part of the long lines.
The full code snippet from the referenced cocoa-dev thread did produce the correct results. Specifically, this set of steps:
我在
NSTextView
上编写了一个扩展。I have written an extension on
NSTextView
.我发现这个解决方案确实防止了换行,但对 NSTextView 产生了一些不幸的绘图后果。问题是,当包含文本视图的 NSPanel 被拖动到比文本行更宽时,NSView 的边界矩形(由底层布局管理器)调整为仅比文本稍长 - 显示 NSPanel 的背景。不是我想要的......
我的解决方案是在 NSPanel 中启用调整大小,通过设置最小和最大尺寸将其限制为水平,并关闭文本视图本身的水平调整大小:
这会导致监视器面板可以可以水平调整大小,不换行,并在其封闭的 NSPanel 中正确绘制。
希望这对某人有帮助 - 如果没有我在这个网站上找到的所有好的修复,我不知道我会在哪里!
I found this solution did prevent line wrapping, but had some unfortunate drawing consequences for the NSTextView. The problem was that when the NSPanel containing the text views was dragged to be wider than the lines of text, the NSView's bounds rect was adjusted (by the underlying layout manager) to just be slightly longer than the text - revealing the NSPanel's background. Not what I had in mind ...
My solutions was to enable resizing in the NSPanel, constrain it to the horizontal by setting of min and max sizes and turn off horizontal resizing for the text view itself:
This results in a monitor panel that can be horizontally resized, does not wrap lines, and draws properly in it's enclosing NSPanel.
Hope this helps someone - don't know where I'd be without all the good fixes I've found on this site!
最简单的方法是在 Interface Builder 中,在检查器中只需更改下拉菜单。
Easiest way is in Interface Builder, in the inspector just change the drop-down menu.