ios - 代码中的自动布局?高度问题?

标签 ios autolayout

enter image description here

我有两个 View ,比如 view1 和 view2。
- view2 应该与 view1 相距 2 像素(垂直)并且
- view2 的高度应使 view2 的底部必须与 viewcontroller 的底部相同。

如何在代码中为此指定约束?

最佳答案

由于我不知道您的 View 层次结构中已有什么,所以我设置了一个简单的示例。查看这段代码。它创建两个新的 UIView 并使用约束定位它们。

- (void)viewDidLoad {
    [super viewDidLoad];

    UIView *view1 = [UIView new];
    UIView *view2 = [UIView new];

    view1.backgroundColor = [UIColor redColor];
    view2.backgroundColor = [UIColor blueColor];

    [self.view addSubview:view1];
    [self.view addSubview:view2];

    [view1 setTranslatesAutoresizingMaskIntoConstraints:NO];
    [view2 setTranslatesAutoresizingMaskIntoConstraints:NO];

    NSDictionary *views = NSDictionaryOfVariableBindings(view1, view2);

    [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-(100)-[view1(200)]-(2)-[view2]|" options:0 metrics:0 views:views]];
    [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"|[view1]|" options:0 metrics:0 views:views]];
    [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"|[view2]|" options:0 metrics:0 views:views]];

}

结果如下:

enter image description here

代码并不难理解。 + constraintsWithVisualFormat: 方法创建一个 NSLayoutConstraint 数组,您可以将其添加到自定义 View 的父 View 中。看here有关视觉格式语言的更多信息。与一个一个地创建约束相比,它在简单布局方面非常有效并且节省了大量时间。

如果您真的想使用 constraintWithItem: 方法创建约束,这里是您的代码:

[self.view addConstraint:[NSLayoutConstraint constraintWithItem:view1 attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeTop multiplier:1 constant:100]];

[self.view addConstraint:[NSLayoutConstraint constraintWithItem:view2 attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:view1 attribute:NSLayoutAttributeBottom multiplier:1 constant:2]];

[self.view addConstraint:[NSLayoutConstraint constraintWithItem:view2 attribute:NSLayoutAttributeBottom relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeBottom multiplier:1 constant:0]];

[self.view addConstraint:[NSLayoutConstraint constraintWithItem:view1 attribute:NSLayoutAttributeLeading relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeLeading multiplier:1 constant:0]];

[self.view addConstraint:[NSLayoutConstraint constraintWithItem:view1 attribute:NSLayoutAttributeTrailing relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeTrailing multiplier:1 constant:0]];

[self.view addConstraint:[NSLayoutConstraint constraintWithItem:view1 attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:view2 attribute:NSLayoutAttributeWidth multiplier:1 constant:0]];

[self.view addConstraint:[NSLayoutConstraint constraintWithItem:view1 attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1 constant:200]];

它产生相同的约束,但占用两倍的空间并且更难阅读。所以我强烈建议您改用视觉格式。对于视觉格式无法始终处理的更复杂的布局,您应该只使用 constraintWithItem:

关于ios - 代码中的自动布局?高度问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30780762/

相关文章:

ios - 将 View 的 CenterX 限制为父 View 总宽度的一部分

ios - 如何使用自动布局在屏幕中水平和垂直居中 UILabel?

ios - 在基于 swift 的应用程序中播放 Avi 视频

ios - 如何以编程方式快速创建 uicollectionview(没有 Storyboard)

ios - 以编程方式设置约束的问题 Swift

html - 如何获得 HTML 属性文本的真实高度

ios - 如何为自动调整单元格正确设置自动布局约束

ios - 从 iOS 应用程序分享到 Facebook 并创建应用程序名称

ios - iOS 中有 MKSquare 吗?

iphone - 由于未捕获的异常 'NSInvalidArgumentException' 而终止应用程序,原因 : '-[__NSCFType next]: unrecognized selector sent to instance '