我想使用布局约束并以编程方式创建我的UI。这是一个简单的程序,我希望你能帮助我理解。在Interface Builder中,我只是采用了默认值 - NSWindow
的默认值为contentView
。以下是所有代码和截图。
我创建了一个按钮,并将其放在内容视图中。然后我尝试使用约束来填充窗口。如您所见,它声称布局不明确。但是,当我点击那个按钮“锻炼歧义”时,没有任何变化。文档说它应该选择不同的可能布局。
我还认为内容视图紧紧围绕着按钮并且没有填充窗口,但我不知道如何强制使用约束。
// 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
答案 0 :(得分:0)
如果您在运行循环的后续迭代中可视化约束,例如使用计时器或单击按钮,在布局引擎传递了它之后怎么办?它可能只是模棱两可,因为布局引擎尚未解决系统问题。
修改:我运行了您的代码,我看到了同样的问题。我现在也很难过。