Я хочу использовать ограничения компоновки и создавать свой пользовательский интерфейс программно. Вот простая программа, которую я надеюсь, что вы можете мне помочь. В 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
Что произойдет, если вы передадите ноль вместо нуля для показателей? – uchuugaka
Это не влияет. –