如何禁用NSTextView的自动换行?

Eon*_*nil 16 cocoa word-wrap nstextview

默认情况下,NSTextView执行自动换行.我怎么能禁用它?我正在制作一个JSON代码查看器,所以我必须禁用它.

Eon*_*nil 25

我从以下网站获得解决方案: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中的自动换行.

[self setMaxSize:CGSizeMake(FLT_MAX, FLT_MAX)];    
[self setHorizontallyResizable:YES];               
[[self textContainer] setWidthTracksTextView:NO];  
[[self textContainer] setContainerSize:CGSizeMake(FLT_MAX, FLT_MAX)];  
Run Code Online (Sandbox Code Playgroud)

更新2

现在,Apple正在提供NSTextView正确创建的官方指南.我希望这有帮助.

更新3

在Github上发布了一个示例项目.有关具体实现,请参阅此页面:https://github.com/Eonil/CocoaProgrammaticHowtoCollection/blob/master/ComponentUsages/TextView/ExampleApplicationController.swift?ts=4

这是示例项目的代码片段.

        if wordwrap {
            /// Matching width is also important here.
            let sz1                                     =   scroll1.contentSize
            text1.frame                                 =   CGRect(x: 0, y: 0, width: sz1.width, height: 0)
            text1.textContainer!.containerSize          =   CGSize(width: sz1.width, height: CGFloat.max)
            text1.textContainer!.widthTracksTextView    =   true
        } else {
            text1.textContainer!.widthTracksTextView    =   false
            text1.textContainer!.containerSize          =   CGSize(width: CGFloat.max, height: CGFloat.max)
        }
Run Code Online (Sandbox Code Playgroud)


Mar*_*age 5

仅Eonil接受的答案中给出的三行对我来说不起作用,结果文本视图没有水平滚动,因此无法看到长行的剪切部分.

来自引用的cocoa-dev线程的完整代码片段确实产生了正确的结果.具体来说,这一系列步骤:

NSSize layoutSize = [textView maxSize];
layoutSize.width = layoutSize.height;
[textView setMaxSize:layoutSize];
[[textView textContainer] setWidthTracksTextView:NO];
[[textView textContainer] setContainerSize:layoutSize];
Run Code Online (Sandbox Code Playgroud)