ios - 为什么项目在 View 之外?

标签 ios xcode layout

我在一个 UIView 中有两个按钮,然后我将 View 添加到主视图,但我最终得到了这样的东西:

enter image description here

如您所见,这两个按钮位于红色 View 之外。

我想要顶部有一点边距,所以我使用 constraintsWithVisualFormat:@"V:|-100-[buttonGroup]-10-|",我不确定这是否重要.

原始代码如下:

- (UIButton*) getButtonWithTitle: (NSString*) title
{
    UIButton *button = [UIButton buttonWithType:UIButtonTypeSystem];

    button.layer.borderColor  = [UIColor blackColor].CGColor;
    button.layer.borderWidth  = 0.5f;
    button.layer.cornerRadius = 2.0f;
    [button setTranslatesAutoresizingMaskIntoConstraints:NO];

    [button setTitle:title forState:UIControlStateNormal];
    [button setTitleColor:[UIColor blackColor] forState: UIControlStateNormal];
    return button;
}

- (void)viewDidLoad {
    [super viewDidLoad];
    [self.view setTranslatesAutoresizingMaskIntoConstraints:NO];

    UIButton *loginBtn    = [self getButtonWithTitle:@"Login"];
    UIButton *registerBtn = [self getButtonWithTitle:@"Register"];

    UIView *buttonGroup = [[UIView alloc] init];
    [buttonGroup setTranslatesAutoresizingMaskIntoConstraints:NO];
    [buttonGroup addSubview: loginBtn];
    [buttonGroup addSubview: registerBtn];
    [self.view addSubview: buttonGroup];
    [buttonGroup setBackgroundColor:[UIColor redColor]];

    NSDictionary *viewsDictionary = NSDictionaryOfVariableBindings(loginBtn, registerBtn, buttonGroup);
    [buttonGroup addConstraints:
     [NSLayoutConstraint constraintsWithVisualFormat:@"H:|-[loginBtn]-20-[registerBtn(==loginBtn)]-|"
                                             options:0
                                             metrics:nil
                                               views:viewsDictionary
      ]];

    NSArray *verticalConstraints = [NSLayoutConstraint
                                    constraintsWithVisualFormat:@"V:|-100-[buttonGroup]-10-|"
                                    options:0
                                    metrics:nil
                                    views:viewsDictionary];
    NSArray *horizontalConstraints = [NSLayoutConstraint
                                    constraintsWithVisualFormat:@"H:|-[buttonGroup]-|"
                                    options:0
                                    metrics:nil
                                    views:viewsDictionary];

    [self.view addConstraints: horizontalConstraints];
    [self.view addConstraints: verticalConstraints];
}

编辑

我添加的约束:

[buttonGroup addConstraints:
 [NSLayoutConstraint constraintsWithVisualFormat:@"V:|-[loginBtn]-|"
                                         options:0
                                         metrics:nil
                                           views:viewsDictionary
  ]];
[buttonGroup addConstraints:
 [NSLayoutConstraint constraintsWithVisualFormat:@"V:|-[registerBtn]-|"
                                         options:0
                                         metrics:nil
                                           views:viewsDictionary
  ]];

看起来我做了额外的工作......

最佳答案

您从未在按钮和按钮组之间创建任何垂直约束;添加那些,你应该很好。此外,您不应将 Controller 的 self.view 的 translatesAutoresizingMaskIntoConstraints 设置为 NO(仅适用于您添加到其中的 subview )。

关于ios - 为什么项目在 View 之外?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28036287/

相关文章:

ios - 如何删除自定义uiview中的边框线?

ios - CBPeripheralManager 限制

ios - 从 NSMutableArray 检索后 NSURL 不起作用

ios - 带有标题和图像的 UIButton

ios - Alamofire 无法使用 cocoapods 构建

Magento 打印页面布局

ios - React Native 中具有固定宽度和可用空间的灵活布局

适用于 Windows 的 iOS 模拟器

css - GWT DataGrid 换行高度

ios - 如何检测用户是否在iOS编程中没有捏合和缩放