2013-05-18 12 views
5

Ich habe 2 benutzerdefinierte UIViews, die ich zu meinem UIViewController hinzufüge und dann mit NSLayoutConstraint ausrichtet. Nachdem ich die NSLayoutConstraint in der UIViewController-Ansicht angewendet habe, empfangen UIB-Schaltflächen in den benutzerdefinierten UIViews keine Berührungsereignisse mehr.UIButton in der Unteransicht, die keine Berührung nach NSLayoutConstraint erhält

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    navigationBar = [[DtNavigationBar alloc] initWithFrame:CGRectMake(0,0,320,45)]; 
    [navigationBar setTranslatesAutoresizingMaskIntoConstraints:NO]; 
    [self.view addSubview:navigationBar]; 

    switchBar = [[DtSwitch alloc] initWithFrame:CGRectMake(0,0,320,44)]; 
    [switchBar setTranslatesAutoresizingMaskIntoConstraints:NO]; 
    [self.view addSubview:switchBar]; 

    [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-0-[navigationBar(45)]-0-[switchBar(44)]-(>=100)-|" 
                     options:NSLayoutFormatAlignAllLeft metrics:nil 
                     views:NSDictionaryOfVariableBindings(switchBar, navigationBar)]]; 
} 

Beide DtNavigationBar und DtSwitch haben UIButton Ansichten, die noch an der richtigen Stelle erscheinen, aber reagiert nicht mehr zu berühren.

Wenn ich den addConstraints Teil entferne (und die Ansichten manuell platziere), dann funktionieren die Buttons gut.

Antwort

14

Das Problem ist, dass Sie genug Constraints gewählt haben, um Constraints zu verwenden. Sie haben ein mehrdeutiges Layout.

Um diese Hypothese zu testen, die App laufen, und im Debugger anhalten und diese Konsole im LLDB eingeben:

po [[UIWindow keyWindow] _autolayoutTrace] 

Die Worte AMBIGUOUS LAYOUT wird irgendwo in der Antwort erscheinen.

Sie benötigen ausreichende Einschränkungen, um diese Wörter verschwinden zu lassen. Sie müssen die vertikale und horizontale Position und Breite und Höhe von allem in der Geschichte vollständig bestimmen.

+0

wow danke ich hätte nie darüber nachgedacht – dowi

Verwandte Themen