如何以编程方式使用约束?

我正在研究只能水平工作的应用程序,并且以编程方式执行所有操作。

我有一个imageview,两个textfield和两个button,但我不知道如何设置这些文本域和button的约束,意味着当我在iPhone 5s中使用,那么它是好的,但是当我使用iPhone 6s加上,然后它看起来小。 我在这里张贴一些代码和截图

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]; 

这是在我的手机6s加 在这里输入图像说明

这是在我phone5s

在这里输入图像说明

请帮助我,提前感谢

注意:当你正在处理自动布局设置框架的一个视图是不会工作的。 您需要为该视图设置约束才能在所有iPhone设备中正确显示。

 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]]; 

在ViewController中添加@IBOutlet的每个项目后。 您可以使用自动布局视觉格式语言来实现编程约束。 这是从我的项目中了解的示例代码。

Swift版本 )如果单元格awakeFromNib或者你可以在viewDidLoad中使用的页面:

  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])) 

在使用Autolayout Visual Format和Swift之前引用的其他链接?

Objective-C版本 )你可以在这里find许多细节做同样的事情。