21

NSTextViewは、デフォルトでワードラップを実行します。これを無効にするにはどうすればよいですか?JSONコードビューアを作成しているので、これを無効にする必要があります。

4

5 に答える 5

33

http://lists.apple.com/archives/cocoa-dev/2008/May/msg02396.htmlから解決策を得ました。

これを正しく機能させるには、NSTextView の最大幅を非常に大きな値に設定する必要があります。(最大の高さをコピーするだけです)そして、NSTextViewのスーパービューであるNSScrollViewの水平スクロールを有効にします。これらの写真を参照してください。

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)
        }
于 2010-07-04T09:51:33.683 に答える
6

Eonilだけで受け入れられた回答で与えられた3行は私にとってはうまくいきませんでした。

参照された cocoa-dev スレッドからの完全なコード スニペットは正しい結果を生成しました。具体的には、この一連の手順:

NSSize layoutSize = [textView maxSize];
layoutSize.width = layoutSize.height;
[textView setMaxSize:layoutSize];
[[textView textContainer] setWidthTracksTextView:NO];
[[textView textContainer] setContainerSize:layoutSize];
于 2013-08-15T02:49:01.410 に答える
-8

最も簡単な方法はInterfaceBuilderで、インスペクターでドロップダウンメニューを変更するだけです。

于 2010-07-04T10:07:24.710 に答える