如何禁用NSTextView的自动换行?

默认情况下,NSTextView执行自动换行。我怎么能禁用它? 我正在制作一个JSON代码查看器,所以我必须禁用它。     
已邀请:
我从以下网站获得解决方案: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)];  
更新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)
        }
    
仅Eonil接受的答案中给出的三行对我来说不起作用,结果文本视图没有水平滚动,因此无法看到长行的剪切部分。 来自引用的cocoa-dev线程的完整代码片段确实产生了正确的结果。具体来说,这一系列步骤:
NSSize layoutSize = [textView maxSize];
layoutSize.width = layoutSize.height;
[textView setMaxSize:layoutSize];
[[textView textContainer] setWidthTracksTextView:NO];
[[textView textContainer] setContainerSize:layoutSize];
    
我发现这个解决方案确实阻止了换行,但是对NSTextView有一些不幸的绘制后果。问题是当包含文本视图的NSPanel被拖动到比文本行更宽时,NSView的边界rect被调整(由底层布局管理器)稍微长于文本 - 显示NSPanel的背景。不是我想到的...... 我的解决方案是在NSPanel中调整大小,通过设置最小和最大尺寸将其约束到水平,并关闭文本视图本身的水平调整大小:
// some fragments from the creation of the NSPanel
// resizable NSPanel created
mMonitorPanel = [[NSPanel alloc] initWithContentRect: monitorRect
              styleMask: (NSTitledWindowMask| NSMiniaturizableWindowMask | NSResizableWindowMask)
                backing: NSBackingStoreBuffered defer: NO];

 // constrain resizing to horizontal only, with obvious limits ...
[mMonitorPanel setContentMaxSize: NSMakeSize(1000, 600)];
[mMonitorPanel setContentMinSize: NSMakeSize(300,  600)];

// a fragment from the init that creates an instance of a subclass of NSTextView ...

[self setVerticallyResizable: NO];
[self setHorizontallyResizable: NO];  // rather than YES as prior code snippet

// the rest is the same as above
[[self textContainer] setContainerSize: NSMakeSize(FLT_MAX, FLT_MAX)];
[[self textContainer] setWidthTracksTextView: NO];
这会导致监视器面板可以水平调整大小,不会换行,并在其封闭的NSPanel中正确绘制。 希望这有助于某人 - 如果没有我在本网站上找到的所有好的修复,我不知道我会在哪里!     
最简单的方法是在Interface Builder中,在检查器中只需更改下拉菜单。     

要回复问题请先登录注册