对容器视图的约束

时间:2015-09-03 13:42:07

标签: ios objective-c autolayout nslayoutconstraint

下面是我正在制定的一个视图。起初我尝试以编程方式进行 - 导航栏下方的蓝色框是图像视图,徽标和文本都是他们自己的图像视图,并且所有三个都包含在容器UIView中。

我试图约束容器视图(然后,当它没有工作时,我只是约束蓝色框并且它起作用)使其水平居中并使其顶部等于20%超视的高度。然后我将其他所有水平对齐(centerX)到顶部的蓝色框,不幸的是,我的对象比我想要的要小。

现在使用故事板,我已经让它在大多数情况下工作了。不幸的是,文本(下面的截图是在我使用故事板之前,原谅任何混淆)和徽标完全扭曲。

以编程方式尝试此操作,我约束了蓝框,徽标和文本的宽度和高度。然后我垂直对齐(通过中心X)这些对象下面的所有其他内容。当我试图水平对齐每个单独的对象以保持大小时,我遇到了错误消息,突出显示存在冲突的约束。

使用容器视图是实现此目的的最佳方式,还是应该废弃这个想法,只是尝试限制蓝色框内的徽标和文本,并限制其他相关内容?

enter image description here

我还会包含我用来执行自动布局的代码。这样做,我应该提一下,防止我的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];

}

0 个答案:

没有答案