2013-06-24 1 views
2

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

enter image description here

+0

Что произойдет, если вы передадите ноль вместо нуля для показателей? – uchuugaka

+0

Это не влияет. –

ответ

0

Что делать, если вы визуализировать ограничения на последующей итерации цикла выполнения, например, с помощью таймера или нажав на кнопку, после того, как расположение двигателя был пропуск на него? Это может быть просто двусмысленно, потому что механизм компоновки еще не решил систему.

Редактировать: Я запустил ваш код и вижу ту же проблему. Я тоже сейчас тупой.