2

NSScrollViewIBから作成されたシンプルなものがあります。.h ファイルからリンクしました。これは次のIBOutletとおりです。

IBOutlet NSScrollView *scroller;

私の .m では、次のNSTextFieldようにプログラムで挿入します。

NSTextField *dateTextField = [[NSTextField alloc]initWithFrame:NSMakeRect(30,yPos - kBreakHeight - 15, 100, kBreakHeight)];
[dateTextField setBordered:NO];
[dateTextField setEditable:NO];
[dateTextField setBackgroundColor:[NSColor clearColor]];
[dateTextField setAlignment:NSLeftTextAlignment];
[dateTextField setFont:[NSFont fontWithName:kAppFontBold size:11]];
[dateTextField setTextColor:[NSColor colorWithCalibratedRed:33/255.0 green:33/255.0 blue:33/255.0 alpha:1]];
[dateTextField setStringValue:dateString];
[[scroller documentView] addSubview:dateTextField];

残念ながら、私のビューの最初のランチでは、テキスト フィールドは正しい位置にありません (ただし、documentView の他の要素はそうです)。位置は、ウィンドウのサイズを変更した場合にのみ正しいです。

打ち上げ時に正しい位置を保つ方法はありますか?

4

2 に答える 2

0

ターゲットにしている OS X のバージョン、およびそれが Lion の場合、自動レイアウトまたは従来のスプリングとストラットのどちらを使用するかについては述べていません。

スプリングとストラット (マスクの自動サイズ変更) を使用する場合は、フレームを追加する前または後に、テキスト フィールドにフレームを設定する必要があります。

自動レイアウトを使用する場合は、フィールドを追加した後に適切な制約を追加する必要があります。ああ、 それを追加translatesAutoresizingMaskIntoConstraintsする前に、テキスト フィールドのプロパティをに設定することを忘れNOないでください。そうしないと、追加したものと干渉する独自の制約が追加されます。私の経験では、自動生成された制約に依存するよりも、独自の明示的な制約を追加する方がはるかに優れています。

ここには、レイアウトの制約に関する優れたドキュメントがいくつかあります。

https://developer.apple.com/library/mac/#documentation/UserExperience/Conceptual/AutolayoutPG/Articles/Introduction.html

http://developer.apple.com/library/mac/#releasenotes/UserExperience/RNAautomaticLayout/_index.html#//apple_ref/doc/uid/TP40010631

昨年の WWDC セッションは、それを理解するのに非常に役立ちます (パスワードが必要です)。

https://developer.apple.com/videos/wwdc/2011/?id=103

于 2012-06-17T13:13:49.597 に答える