下面是我正在制定的一个视图。起初我尝试以编程方式进行 - 导航栏下方的蓝色框是图像视图,徽标和文本都是他们自己的图像视图,并且所有三个都包含在容器UIView中。
我试图约束容器视图(然后,当它没有工作时,我只是约束蓝色框并且它起作用)使其水平居中并使其顶部等于20%超视的高度。然后我将其他所有水平对齐(centerX)到顶部的蓝色框,不幸的是,我的对象比我想要的要小。
现在使用故事板,我已经让它在大多数情况下工作了。不幸的是,文本(下面的截图是在我使用故事板之前,原谅任何混淆)和徽标完全扭曲。
以编程方式尝试此操作,我约束了蓝框,徽标和文本的宽度和高度。然后我垂直对齐(通过中心X)这些对象下面的所有其他内容。当我试图水平对齐每个单独的对象以保持大小时,我遇到了错误消息,突出显示存在冲突的约束。
使用容器视图是实现此目的的最佳方式,还是应该废弃这个想法,只是尝试限制蓝色框内的徽标和文本,并限制其他相关内容?
我还会包含我用来执行自动布局的代码。这样做,我应该提一下,防止我的UITextFields下面的那些线出现,这对我来说是一个主要的设计问题。使用故事板,它们看起来很好。
-(void)autoLayout {
[self.view removeConstraints:self.view.constraints];
UITextField *username = self.usernameField;
UITextField *password = self.passwordField;
UIImageView *logoBlock = self.logoBlock;
UIView *containerView = self.containerView;
UIImageView * userIcon = self.userIcon;
UIImageView *passwordIcon = self.passwordIcon;
UIButton *login = self.signInButton;
UIButton *facebookLogin = self.facebookButton;
NSDictionary *views = NSDictionaryOfVariableBindings(username, password, logoBlock, containerView, userIcon, passwordIcon, login, facebookLogin);
[self.view addConstraint:[NSLayoutConstraint constraintWithItem:logoBlock
attribute:NSLayoutAttributeCenterX
relatedBy:NSLayoutRelationEqual
toItem:self.view
attribute:NSLayoutAttributeCenterX
multiplier:1
constant:0]];
[self.view addConstraint:[NSLayoutConstraint constraintWithItem:logoBlock
attribute:NSLayoutAttributeTop
relatedBy:NSLayoutRelationEqual
toItem:self.view
attribute:NSLayoutAttributeBottom
multiplier:.2
constant:0.00]];
//
[self.view addConstraints:[NSLayoutConstraint
constraintsWithVisualFormat:@"V:[logoBlock]-90-[username]-30-[password]-40-[login]-20-[facebookLogin]"
options:0
metrics:nil
views:views]];
NSArray *totalConstraints = [NSLayoutConstraint
constraintsWithVisualFormat:@"|-80-[username]-40-|"
options:0
metrics:nil
views:views];
totalConstraints = [totalConstraints arrayByAddingObjectsFromArray:[NSLayoutConstraint
constraintsWithVisualFormat:@"|-80-[password]-40-|"
options:0
metrics:nil
views:views]];
totalConstraints = [totalConstraints arrayByAddingObjectsFromArray:[NSLayoutConstraint
constraintsWithVisualFormat:@"|-50-[login]-50-|"
options:0
metrics:nil
views:views]];
totalConstraints = [totalConstraints arrayByAddingObjectsFromArray:[NSLayoutConstraint
constraintsWithVisualFormat:@"|-50-[facebookLogin]-50-|"
options:0
metrics:nil
views:views]];
[self.view addConstraints:totalConstraints];
}