- (void)setLayout { for (UIView *view in [self.contentView subviews]) { view.translatesAutoresizingMaskIntoConstraints = NO; } NSDictionary *viewsDict = NSDictionaryOfVariableBindings(_titleLabel, _bodyLabel, _authorLabel, _timeLabel, _commentCount); //titlelable 与视图的间距为8,与bobyLabel的间距为5,纵向,左右对齐 [self.contentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-8-[_titleLabel]-5-[_bodyLabel]" options:NSLayoutFormatAlignAllLeft | NSLayoutFormatAlignAllRight metrics:nil views:viewsDict]]; //bodyLabel的与authroLabel的间距为5,_authorLabel间距与视图的间距为8,左对齐 [self.contentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:[_bodyLabel]-5-[_authorLabel]-8-|" options:NSLayoutFormatAlignAllLeft metrics:nil views:viewsDict]]; //横向间距,titleLabel与左右视图的间距为8 [self.contentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"|-8-[_titleLabel]-8-|" options:0 metrics:nil views:viewsDict]]; //横向间距 _authorLabel与timeLabel的间距为10, timeLabel 与视图间距为8,上下对齐 [self.contentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"[_authorLabel]-10-[_timeLabel]-10-[_commentCount]" options:NSLayoutFormatAlignAllTop | NSLayoutFormatAlignAllBottom metrics:nil views:viewsDict]]; }

UILabel *nameLabel = [UILabel new]; nameLabel.text = usersInformation[0]; nameLabel.font = [UIFont boldSystemFontOfSize:20]; nameLabel.textColor = [UIColor colorWithHex:0x696969]; nameLabel.translatesAutoresizingMaskIntoConstraints = NO; [headerView addSubview:nameLabel]; NSDictionary *views = NSDictionaryOfVariableBindings(portraitView, nameLabel); //metrics传入参数,x = 多少, NSDictionary *metrics = @{@"x": @([UIScreen mainScreen].bounds.size.width / 4 - 15)}; //NSLayoutFormatAlignAllCenterX 居中对齐 [headerView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:[portraitView(60)]-10-[nameLabel]-15-|" options:NSLayoutFormatAlignAllCenterX metrics:nil views:views]]; //表示x = metrics定义的值,portraitView距离x的距离 [headerView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"|-x-[portraitView(60)]" options:0 metrics:metrics views:views]]; portraitView.userInteractionEnabled = YES; nameLabel.userInteractionEnabled = YES; [portraitView addGestureRecognizer:[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(pushLoginPage)]]; [nameLabel addGestureRecognizer:[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(pushLoginPage)]];

- (void)setLayout { UIImageView *email = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"login-email"]]; email.contentMode = UIViewContentModeScaleAspectFill; UIImageView *password = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"login-password"]]; password.contentMode = UIViewContentModeScaleAspectFit; [self.view addSubview:email]; [self.view addSubview:password]; for (UIView *view in [self.view subviews]) { view.translatesAutoresizingMaskIntoConstraints = NO;} NSDictionary *views = NSDictionaryOfVariableBindings(email, password, _accountField, _passwordField, _loginButton, _registerInfo); [self.view addConstraint:[NSLayoutConstraint constraintWithItem:self.view attribute:NSLayoutAttributeCenterX relatedBy:NSLayoutRelationEqual toItem:_loginButton attribute:NSLayoutAttributeCenterX multiplier:1 constant:0]]; [self.view addConstraint:[NSLayoutConstraint constraintWithItem:self.view attribute:NSLayoutAttributeCenterY relatedBy:NSLayoutRelationEqual toItem:_loginButton attribute:NSLayoutAttributeCenterY multiplier:1 constant:0]]; [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:[email(20)]-20-[password(20)]-30-[_loginButton(40)]" options:0 metrics:nil views:views]]; [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"|-20-[_loginButton]-20-|" options:0 metrics:nil views:views]]; [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:[_loginButton]-20-[_registerInfo(30)]" options:NSLayoutFormatAlignAllLeft | NSLayoutFormatAlignAllRight metrics:nil views:views]]; //垂直居中显示,X轴方向对齐 [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"|-30-[email(20)]-[_accountField]-30-|" options:NSLayoutFormatAlignAllCenterY metrics:nil views:views]]; [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"|-30-[password(20)]-[_passwordField]-30-|" options:NSLayoutFormatAlignAllCenterY metrics:nil views:views]]; }

//如果是横向方向设置的中心点对齐,调用NSLayoutFormatAlignAllCenterX会崩溃,同理,如果是纵向方向,如果调用是NSLayoutFormatAlignAllCenterY,也会崩溃的
[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-100-[redview(100)]-20-[blueView]-30-|" options:NSLayoutFormatAlignAllCenterX metrics:nil views:views]];
options:NSLayoutFormatAlignAllCenterX 水平居中
options:NSLayoutFormatAlignAllCenterY 垂直居中
浙公网安备 33010602011771号