2015-02-21 6 views
4

Я следил за несколькими учебниками, но я не могу заставить мое приложение принять правила, которые я установил для NSAutoLayoutConstraints.NSAutoLayoutConstraints crashing app

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Unable to parse constraint format: 
Unable to interpret '|' character, because the related view doesn't have a superview 
V:|-[signupBtn][signupWithFacebookBtn]-| 

В моем методе viewLoad:

-(void)loadView 
{ 
    [super loadView]; 



    //Create the background view 
    [self.view setBackgroundColor:[UIColor whiteColor]]; 


    //Set up the buttons, labels, and textfields 
    signupBtn = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
    [signupBtn setTitle:@"Sign Up!" forState:UIControlStateNormal]; 
    [signupBtn setTranslatesAutoresizingMaskIntoConstraints:NO]; 
    [signupBtn setFrame:CGRectMake(50, 350, 220, 40)]; 
    signupWithFacebookBtn = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
    [signupWithFacebookBtn setTitle:@"Sign Up with Facebook" forState:UIControlStateNormal]; 
    [signupWithFacebookBtn setTranslatesAutoresizingMaskIntoConstraints:NO]; 
    [signupWithFacebookBtn setFrame:CGRectMake(50, 400, 320, 40)]; 



    //A dictionary of all subviews 
    NSDictionary* m_viewsDictionary = NSDictionaryOfVariableBindings(signupBtn, signupWithFacebookBtn); 

    //Constraints 
    NSArray* verticalConstraints = [NSLayoutConstraint constraintsWithVisualFormat:@"V:|-[signupBtn][signupWithFacebookBtn]-|" options:0 metrics:nil views:m_viewsDictionary]; 
    NSArray* horizontalConstraints = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|-[signupBtn][signupWithFacebookBtn]-|" options:0 metrics:nil views:m_viewsDictionary]; 



    //Add the buttons, labels and textfields 
    [self.view addSubview:signupBtn]; 
    [self.view addSubview:signupWithFacebookBtn]; 

    //Add constraints 
    [self.view addConstraints:verticalConstraints]; 
    [self.view addConstraints:horizontalConstraints]; 


    NSLog(@"Hello world"); 
} 

Я не знаю, почему это происходит сбой. Подразделы существуют и добавляются до добавления ограничений. Кроме того, обе кнопки имеют setTranslatesAutoresizeMaskIntoConstraints, установленный в НЕТ. Что мне не хватает?

ответ

19

Вы должны добавить кнопки в виде подзонов, прежде чем определять ограничения - синтаксический анализатор не понимает, что «|» потому что ваши кнопки не имеют надстройки во время создания ограничений.

+0

Ах! Понимаю. Я неправильно понял, и подумал, что ограничения должны были быть добавлены после добавления подпунктов, но не определены. Спасибо! –

+0

Пожалуйста, добавьте отредактированный код – Abhishek