Search code examples
iosobjective-cautolayout

iOS: Autolayout not showing correct size in iPhone


I am making one app, in which I need to show two buttons at bottom named Sign In and Login. I have used Autolayout for this, beacuase I need to support all iPhone device. It's working till iPhone 5S and showing correct.However in iPhone 6 Sign Up button is not expanding its width. I am doing something wrong, but not sure where. Below is my code.

Attach is the screenshot also.enter image description here

NSDictionary *viewsDictionary = @{@"loginButton":self.loginButton};

//Define the LoginButton Size

NSArray *constraint_H = [NSLayoutConstraint constraintsWithVisualFormat:@"V:[loginButton(52)]" options:0 metrics:nil views:viewsDictionary];
NSArray *constraint_V = [NSLayoutConstraint constraintsWithVisualFormat:@"H:[loginButton(160)]" options:0 metrics:nil views:viewsDictionary];

[self.loginButton addConstraints:constraint_H];
[self.loginButton addConstraints:constraint_V];

//Define the LoginView Postion

NSArray *constraint_POS_V = [NSLayoutConstraint constraintsWithVisualFormat:@"V:[loginButton]-0-|" options:0 metrics:nil views:viewsDictionary];
NSArray *constraint_POS_H = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|-0-[loginButton]" options:0 metrics:nil views:viewsDictionary];

[self.view addConstraints:constraint_POS_V];
[self.view addConstraints:constraint_POS_H];

//Define the SignInButton Size

NSDictionary *yellowDictionary = @{@"signInButton":self.signInButton};

NSArray *yellow_constraint_H = [NSLayoutConstraint constraintsWithVisualFormat:@"V:[signInButton(52)]" options:0 metrics:nil views:yellowDictionary];
NSArray *yellow_constraint_V = [NSLayoutConstraint constraintsWithVisualFormat:@"H:[signInButton(160)]" options:0 metrics:nil views:yellowDictionary];

[self.signInButton addConstraints:yellow_constraint_H];
[self.signInButton addConstraints:yellow_constraint_V];


//Define the SignInView Postion

NSArray *yellowconstraint_POS_V = [NSLayoutConstraint constraintsWithVisualFormat:@"V:[signInButton]-0-|" options:0 metrics:nil views:yellowDictionary];
NSArray *yellowconstraint_POS_H = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|-161-[signInButton]" options:0 metrics:nil views:yellowDictionary];

[self.view addConstraints:yellowconstraint_POS_V];
[self.view addConstraints:yellowconstraint_POS_H];

Solution

  • you have fixed login button and signup button size to 160 each. thats the only issue.

    You need to calculate screen width and acordingly give width constraint of the buttons.

    Below code will resolve your issue.

    CGSize screenSize = [UIScreen mainScreen].bounds.size;

    NSArray *constraint_H = [NSLayoutConstraint constraintsWithVisualFormat:@"V:[loginButton(52)]" options:0 metrics:nil views:viewsDictionary];
    NSArray *constraint_V = [NSLayoutConstraint constraintsWithVisualFormat:[NSString stringWithFormat:@"H:[loginButton(%.f)]",screenSize.width/2] options:0 metrics:nil views:viewsDictionary];
    
    [self.loginButton addConstraints:constraint_H];
    [self.loginButton addConstraints:constraint_V];
    
    //Define the LoginView Postion
    
    NSArray *constraint_POS_V = [NSLayoutConstraint constraintsWithVisualFormat:@"V:[loginButton]-0-|" options:0 metrics:nil views:viewsDictionary];
    NSArray *constraint_POS_H = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|-0-[loginButton]" options:0 metrics:nil views:viewsDictionary];
    
    [self.view addConstraints:constraint_POS_V];
    [self.view addConstraints:constraint_POS_H];
    
    //Define the SignInButton Size
    
    NSDictionary *yellowDictionary = @{@"signInButton":self.signInButton};
    
    NSArray *yellow_constraint_H = [NSLayoutConstraint constraintsWithVisualFormat:@"V:[signInButton(52)]" options:0 metrics:nil views:yellowDictionary];
    NSArray *yellow_constraint_V = [NSLayoutConstraint constraintsWithVisualFormat:[NSString stringWithFormat:@"H:[signInButton(%.f)]",screenSize.width/2]  options:0 metrics:nil views:yellowDictionary];
    
    [self.signInButton addConstraints:yellow_constraint_H];
    [self.signInButton addConstraints:yellow_constraint_V];
    
    
    //Define the SignInView Postion
    
    NSArray *yellowconstraint_POS_V = [NSLayoutConstraint constraintsWithVisualFormat:@"V:[signInButton]-0-|" options:0 metrics:nil views:yellowDictionary];
    NSArray *yellowconstraint_POS_H = [NSLayoutConstraint constraintsWithVisualFormat:[NSString stringWithFormat:@"H:|-%f-[signInButton]",(screenSize.width/2)+1] options:0 metrics:nil views:yellowDictionary];
    
    [self.view addConstraints:yellowconstraint_POS_V];
    [self.view addConstraints:yellowconstraint_POS_H];