2016-03-31 17 views
-1

Ich arbeite an einer Anwendung, die nur horizontal arbeitet und alles programmatisch macht.Wie programmgesteuert Constraints verwenden?

Ich habe eine Bildansicht, zwei Textfelder und zwei Tasten, aber ich weiß nicht, wie man Einschränkungen auf diesen Textfeldern und Tasten, bedeutet, wenn ich in iPhone 5s dann ist es in Ordnung, aber wenn ich iPhone 6s benutze Plus, dann sieht es klein aus. Ich veröffentliche hier einige Code und Screenshots

UIImageView *logoImage = [[UIImageView alloc]init]; 
    logoImage.frame = CGRectMake(CGRectGetMidX(self.view.frame)-100, 10, 250, 100); 
    [logoImage setImage:[UIImage imageNamed:@"antya_logo1.png"]]; 

    [self.view addSubview:logoImage]; 

    UILabel *loginLabel = [[UILabel alloc]init]; 
    loginLabel.frame = CGRectMake(10, 0, 100, 40); 
    loginLabel.text = @"Login Form"; 
    loginLabel.textColor = [UIColor blackColor]; 
    loginLabel.font = [UIFont fontWithName:@"LaoSangamMN" size:18]; 


    CGFloat Xuser = CGRectGetMidX(self.view.frame)-120; 
    CGFloat Yuser = CGRectGetMaxY(loginLabel.frame)+80; 

    usernameField = [[UITextField alloc]init]; 
    usernameField.frame = CGRectMake(Xuser, Yuser, 300, 35); 
    usernameField.placeholder = @" User Name"; 
    usernameField.font = [UIFont fontWithName:@"LaoSangamMN" size:18]; 
    usernameField.backgroundColor = [UIColor whiteColor]; 
    usernameField.layer.cornerRadius = 7; 
    usernameField.layer.borderWidth = 0.5; 

    [self.view addSubview:usernameField]; 

    UIImageView *userImgV = [[UIImageView alloc]init]; 
    userImgV.frame = CGRectMake(CGRectGetMinX(usernameField.frame)-35, CGRectGetMinY(usernameField.frame)+5, 25, 25); 
    [userImgV setImage:[UIImage imageNamed:@"user-icon.png"]]; 

    [self.view addSubview:userImgV]; 

    CGFloat Ypass = CGRectGetMaxY(usernameField.frame)+20; 

    passwordField = [[UITextField alloc]init]; 
    passwordField.frame = CGRectMake(Xuser, Ypass, 300, 35); 
    passwordField.placeholder = @" Password"; 
    passwordField.secureTextEntry = YES; 
    passwordField.font = [UIFont fontWithName:@"LaoSangamMN" size:18]; 
    passwordField.backgroundColor = [UIColor whiteColor]; 
    passwordField.layer.cornerRadius = 7; 
    passwordField.layer.borderWidth = 0.5; 


    [self.view addSubview:passwordField]; 

dies in Telefon 6s i plus enter image description here

und dies ist in i phone5s

enter image description here

Bitte helfen Sie mir, Dank in Fortschritt

+1

haben Sie irgendwelche Einschränkungen ??? Wenn nicht als zuerst versuchen Sie etwas ... –

+0

Sie müssen Ihren Code von der Verwendung bestimmter Größen zu Einschränkungen verwenden. Schauen Sie in die Ansichtsanker, sie sind am einfachsten zu verwenden. Dann, wenn du nicht weiterkommst, komm zurück und stelle einige spezifischere Fragen. Schließlich ist es sinnvoll, alles programmatisch zu machen, um zu lernen, wie die Dinge funktionieren. Aber mit einem XIB oder Storyboard sparen Sie viel Code und Aufwand. Vor allem, wie einfach dieses Layout ist. – drekka

+0

nein Ich habe keine Einschränkung verwendet, ich weiß nicht, wie man programmatisch verwendet, daher frage ich hier, ich mache diese Anwendung nur horizontal –

Antwort

1

Hinweis: Wenn Sie mit der automatischen Layouteinstellung arbeiten, wird der Rahmen einer Ansicht nicht funktionieren. Sie müssen Einschränkungen für diese Ansicht festlegen, damit sie auf allen iPhone-Geräten korrekt angezeigt werden.

UIImageView *logoImage = [[UIImageView alloc] init]; 
[logoImage setImage:[UIImage imageNamed:@"antya_logo1.png"]]; 
logoImage.translatesAutoresizingMaskIntoConstraints = false; 

[self.view addSubview:logoImage]; 

UILabel *loginLabel = [[UILabel alloc]init]; 
loginLabel.text = @"Login Form"; 
loginLabel.textColor = [UIColor blackColor]; 
loginLabel.font = [UIFont fontWithName:@"LaoSangamMN" size:18]; 
loginLabel.translatesAutoresizingMaskIntoConstraints = false; 

[self.view addSubview:loginLabel]; 

UITextField *usernameField = [[UITextField alloc]init]; 
usernameField.placeholder = @" User Name"; 
usernameField.font = [UIFont fontWithName:@"LaoSangamMN" size:18]; 
usernameField.backgroundColor = [UIColor whiteColor]; 
usernameField.layer.cornerRadius = 7; 
usernameField.layer.borderWidth = 0.5; 
usernameField.translatesAutoresizingMaskIntoConstraints = false; 

UIImageView *userImgV = [[UIImageView alloc]init]; 
[userImgV setImage:[UIImage imageNamed:@"user-icon.png"]]; 

//set left view of textfield 
usernameField.leftView = userImgV; 
usernameField.leftViewMode = UITextFieldViewModeAlways; 
[self.view addSubview:usernameField]; 


UITextField *passwordField = [[UITextField alloc]init]; 
passwordField.placeholder = @" Password"; 
passwordField.secureTextEntry = YES; 
passwordField.font = [UIFont fontWithName:@"LaoSangamMN" size:18]; 
passwordField.backgroundColor = [UIColor whiteColor]; 
passwordField.layer.cornerRadius = 7; 
passwordField.layer.borderWidth = 0.5; 
passwordField.translatesAutoresizingMaskIntoConstraints = false; 

//set left view of textfield 

UIImageView *passwordImgV = [[UIImageView alloc]init]; 
[passwordImgV setImage:[UIImage imageNamed:@"password-icon.png"]]; 

passwordField.leftView = passwordImgV; 
passwordField.leftViewMode = UITextFieldViewModeAlways; 
[self.view addSubview:passwordField]; 


UIButton *buttonSignUp = [UIButton buttonWithType:UIButtonTypeCustom]; 
[buttonSignUp setTag:101]; 
[buttonSignUp setTitle:@"SIGNUP" forState:UIControlStateNormal]; 
[buttonSignUp addTarget:self action:@selector(<your selector>) forControlEvents:UIControlEventTouchUpInside]; 
buttonSignUp.translatesAutoresizingMaskIntoConstraints = false; 
[self.view addSubview:buttonSignUp]; 

UIButton *buttonFP = [UIButton buttonWithType:UIButtonTypeCustom]; 
[buttonFP setTag:101]; 
[buttonFP setTitle:@"SIGNUP" forState:UIControlStateNormal]; 
[buttonFP addTarget:self action:@selector(<your selector>) forControlEvents:UIControlEventTouchUpInside]; 
buttonFP.translatesAutoresizingMaskIntoConstraints = false; 
[self.view addSubview:buttonFP]; 

//setting constraints 

//logoImage 
//leading 
[self.view addConstraint:[NSLayoutConstraint constraintWithItem:logoImage attribute:NSLayoutAttributeLeading relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeLeading multiplier:1.0 constant:10]]; 

//Top 
[self.view addConstraint:[NSLayoutConstraint constraintWithItem:logoImage attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeTop multiplier:1.0 constant:10]]; 

//traling 
[self.view addConstraint:[NSLayoutConstraint constraintWithItem:self.view attribute:NSLayoutAttributeTrailing relatedBy:NSLayoutRelationEqual toItem:logoImage attribute:NSLayoutAttributeTrailing multiplier:1.0 constant:10]]; 


// usernameField 
//leading 
[self.view addConstraint:[NSLayoutConstraint constraintWithItem:usernameField attribute:NSLayoutAttributeLeading relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeLeading multiplier:1.0 constant:10]]; 

//traling 
[self.view addConstraint:[NSLayoutConstraint constraintWithItem:self.view attribute:NSLayoutAttributeTrailing relatedBy:NSLayoutRelationEqual toItem:usernameField attribute:NSLayoutAttributeTrailing multiplier:1.0 constant:10]]; 

//top 
[self.view addConstraint:[NSLayoutConstraint constraintWithItem:logoImage attribute:NSLayoutAttributeBottom relatedBy:NSLayoutRelationEqual toItem:usernameField attribute:NSLayoutAttributeTop multiplier:1.0 constant:10]]; 

//passwordField 
//leading 
[self.view addConstraint:[NSLayoutConstraint constraintWithItem:passwordField attribute:NSLayoutAttributeLeading relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeLeading multiplier:1.0 constant:10]]; 

//traling 
[self.view addConstraint:[NSLayoutConstraint constraintWithItem:self.view attribute:NSLayoutAttributeTrailing relatedBy:NSLayoutRelationEqual toItem:passwordField attribute:NSLayoutAttributeTrailing multiplier:1.0 constant:10]]; 

//top 
[self.view addConstraint:[NSLayoutConstraint constraintWithItem:passwordField attribute:NSLayoutAttributeBottom relatedBy:NSLayoutRelationEqual toItem:passwordField attribute:NSLayoutAttributeTop multiplier:1.0 constant:10]]; 


//buttonSignUp and buttonFP 

//leading for buttonSignUp 
[self.view addConstraint:[NSLayoutConstraint constraintWithItem:buttonSignUp attribute:NSLayoutAttributeLeading relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeLeading multiplier:1.0 constant:10]]; 

//traling for buttonFP 
[self.view addConstraint:[NSLayoutConstraint constraintWithItem:self.view attribute:NSLayoutAttributeTrailing relatedBy:NSLayoutRelationEqual toItem:buttonFP attribute:NSLayoutAttributeTrailing multiplier:1.0 constant:10]]; 

//equal width for both 
[self.view addConstraint:[NSLayoutConstraint constraintWithItem:buttonFP attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:buttonSignUp attribute:NSLayoutAttributeWidth multiplier:1.0 constant:0]]; 

//space between both btns 
[self.view addConstraint:[NSLayoutConstraint constraintWithItem:buttonFP attribute:NSLayoutAttributeLeft relatedBy:NSLayoutRelationEqual toItem:buttonSignUp attribute:NSLayoutAttributeRight multiplier:1.0 constant:10]]; 

//top for both 
[self.view addConstraint:[NSLayoutConstraint constraintWithItem:buttonSignUp attribute:NSLayoutAttributeBottom relatedBy:NSLayoutRelationEqual toItem:passwordField attribute:NSLayoutAttributeTop multiplier:1.0 constant:10]]; 

[self.view addConstraint:[NSLayoutConstraint constraintWithItem:buttonFP attribute:NSLayoutAttributeBottom relatedBy:NSLayoutRelationEqual toItem:passwordField attribute:NSLayoutAttributeTop multiplier:1.0 constant:10]]; 

//bottom 
[self.view addConstraint:[NSLayoutConstraint constraintWithItem:self.view attribute:NSLayoutAttributeBottom relatedBy:NSLayoutRelationEqual toItem:buttonFP attribute:NSLayoutAttributeBottom multiplier:1.0 constant:10]]; 

[self.view addConstraint:[NSLayoutConstraint constraintWithItem:self.view attribute:NSLayoutAttributeBottom relatedBy:NSLayoutRelationEqual toItem:buttonSignUp attribute:NSLayoutAttributeBottom multiplier:1.0 constant:10]]; 
+0

Vielen Dank @MGP tolle Arbeit ..... –

0

Nach dem Hinzufügen @IBOutlet jedes der Elemente auf Vie wController. Sie können Auto Layout Visual Format Sprache verwenden, um programmgesteuert Einschränkungen zu implementieren. Hier ist ein Beispielcode, den Sie von meinem Projekt verstehen können.

(Swift Version) Wenn die Zelle awakeFromNib oder oder Seite, die Sie in viewDidLoad verwenden:

avaImg.translatesAutoresizingMaskIntoConstraints = false 
    usernameBtn.translatesAutoresizingMaskIntoConstraints = false 
    infoLbl.translatesAutoresizingMaskIntoConstraints = false 
    dateLbl.translatesAutoresizingMaskIntoConstraints = false 

    self.contentView.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat(
     "H:|-10-[ava(30)]-10-[username]-7-[info]-10-[date]", 
     options: [], metrics: nil, views: ["ava":avaImg, "username":usernameBtn, "info":infoLbl, "date":dateLbl])) 

    self.contentView.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat(
     "V:|-10-[ava(30)]-10-|", 
     options: [], metrics: nil, views: ["ava":avaImg])) 

    self.contentView.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat(
     "V:|-10-[username(30)]", 
     options: [], metrics: nil, views: ["username":usernameBtn])) 

    self.contentView.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat(
     "V:|-10-[info(30)]" 
     , options: [], metrics: nil, views: ["info":infoLbl])) 

    self.contentView.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat(
     "V:|-10-[date(30)]", 
     options: [], metrics: nil, views: ["date":dateLbl])) 

Zusätzliche Link zitiert vor Using Autolayout Visual Format with Swift?

(Objective-C Version) Sie können here viele Details finden, um dasselbe zu tun.

Verwandte Themen