NSTextViewは、デフォルトでワードラップを実行します。これを無効にするにはどうすればよいですか?JSONコードビューアを作成しているので、これを無効にする必要があります。
5 に答える
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)
}
Eonilだけで受け入れられた回答で与えられた3行は私にとってはうまくいきませんでした。
参照された cocoa-dev スレッドからの完全なコード スニペットは正しい結果を生成しました。具体的には、この一連の手順:
NSSize layoutSize = [textView maxSize];
layoutSize.width = layoutSize.height;
[textView setMaxSize:layoutSize];
[[textView textContainer] setWidthTracksTextView:NO];
[[textView textContainer] setContainerSize:layoutSize];
最も簡単な方法はInterfaceBuilderで、インスペクターでドロップダウンメニューを変更するだけです。