我想使用布局约束并以编程方式创建我的 UI。这是一个简单的程序,希望您能帮助我理解。在 Interface Builder 中,我只是采用了默认值——有一个NSWindow
带有它的 default contentView
。以下是所有代码和屏幕截图。
我创建了一个按钮,并将其放置在内容视图中。然后我尝试使用约束使其填充窗口。如您所见,它声称布局不明确。但是当我点击那个按钮来“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