2013-05-18 13 views
5

Mam 2 niestandardowe UIViews, które dodajemy do mojego UIViewController, a następnie wyrównanie ich za pomocą NSLayoutConstraint. Po zastosowaniu NSLayoutConstraint w widoku UIViewController, a UIButtons w niestandardowym UIViews nie będą już otrzymywać zdarzeń dotyku.UIButton w subview nie otrzymuje dotyk po NSLayoutConstraint

- (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)]]; 
} 

Zarówno DtNavigationBar i DtSwitch mają UIButton widoki, które wciąż pojawiają się w odpowiednim miejscu, ale nie reaguje na dotyk.

Po usunięciu części addConstraints (i ręcznym umieszczeniu widoków) przyciski działają poprawnie.

Odpowiedz

14

Problem polega na tym, że po wybraniu ograniczeń nie używa się wystarczającej liczby więzów. Masz niejednoznaczny układ.

Aby przetestować tę hipotezę, uruchom aplikację i wstrzymać w debugger i wprowadzić to w konsoli lldb:

po [[UIWindow keyWindow] _autolayoutTrace] 

słowa dwuznaczne UKŁAD pojawi się gdzieś w odpowiedzi.

Potrzebujesz wystarczających ograniczeń, aby te słowa zniknęły. Musisz w pełni określić pionowe i poziome położenie wszystkich elementów opowieści.

+0

wow, dzięki, nigdy bym nie pomyślał o tym – dowi

Powiązane problemy