2013-05-18 4 views
5

2 개의 사용자 정의 UIView가 UIViewController에 추가되어 있고 NSLayoutConstraint를 사용하여 정렬됩니다. UIViewController 뷰에 NSLayoutConstraint를 적용한 후 사용자 정의 UIView의 UIButton은 더 이상 터치 이벤트를받지 않습니다.서브 뷰의 UIButton이 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)]]; 
} 

는 DtNavigationBar 및 DtSwitch 모두 여전히 적절한 장소에 표시있는 UIButton 전망을 가지고 있지만 더 이상 터치에 반응하지 않습니다.

addConstraints 부분을 제거하고 뷰를 수동으로 배치하면 버튼이 정상적으로 작동합니다.

답변

14

제약 조건을 사용하기로 결정하면 제약 조건을 사용하지 않는 것이 문제입니다. 모호한 레이아웃이 있습니다.

는이 가설을 테스트 응용 프로그램을 실행하고 디버거에서 일시 정지하고 lldb 콘솔이를 입력 :

po [[UIWindow keyWindow] _autolayoutTrace] 

단어 AMBIGUOUS LAYOUT는 응답 어딘가에서 나타납니다.

단어가 사라지게하려면 충분한 제약이 필요합니다. 당신은 완전히 수직 및 수평 위치 이야기의 모든 높이를 결정해야합니다.

+0

와우 덕분에 나는 그것에 대해 생각해 본 적이 없었습니다. – dowi

관련 문제