レイアウトの制約を使用して、プログラムで UI を作成したいと考えています。これは簡単なプログラムです。理解を助けてくれることを願っています。Interface Builder では、単純にデフォルトNSWindow
を使用しました。デフォルトの がありますcontentView
。以下はすべてのコードとスクリーンショットです。
ボタンを 1 つ作成し、コンテンツ ビューに配置します。次に、制約を使用してウィンドウを埋めようとします。ご覧のとおり、レイアウトがあいまいであると主張しています。しかし、そのボタンをクリックして「Exercise Ambiguity」をクリックしても、何も変わりません。ドキュメントによると、別の可能なレイアウトを選択する必要があります。
また、コンテンツ ビューがボタンをしっかりと囲み、ウィンドウを埋めていないと思いますが、制約を強制する方法がわかりません。
// In AppDelegate.h
@interface AppDelegate : NSObject <NSApplicationDelegate> {
NSButton *_button;
}
@property (assign) IBOutlet NSWindow *window;
@end
// In AppDelegate.m
@implementation AppDelegate
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
NSView *contentView = (NSView*)_window.contentView;
_button = [[NSButton alloc] init];
_button.title = @"Test";
_button.translatesAutoresizingMaskIntoConstraints = NO;
contentView.translatesAutoresizingMaskIntoConstraints = NO;
[contentView addSubview:_button];
NSDictionary *viewsDict = NSDictionaryOfVariableBindings(_button, contentView);
NSMutableArray *constraints = [[NSMutableArray alloc] init];
[constraints addObjectsFromArray: [NSLayoutConstraint constraintsWithVisualFormat:@"|[_button]|" options:0 metrics:0 views:viewsDict]];
[constraints addObjectsFromArray: [NSLayoutConstraint constraintsWithVisualFormat:@"V:|[_button]|" options:0 metrics:0 views:viewsDict]];
[contentView addConstraints:constraints];
[_window visualizeConstraints:constraints];
printf("Is layout ambiguous? %d\n", contentView.hasAmbiguousLayout);
}
@end