ios - 如何使用自动布局为 UIViews 设置相等的宽度 "Constraint with item format"

标签 ios objective-c uiview

在我的应用程序中,我在 View Controller 上插入了 UIViews。我的主要要求是我想使用自动布局“项目格式约束”为两个 UIView 设置相等的宽度。

为此,我编写了一些代码,但没有得到相等的宽度。我在这里做错了什么?

我想得到如下图所示的结果(即需要为两个 UIView 设置相等的宽度)。

我的代码:

#import "ViewController8.h"

@interface ViewController8 ()
{
    UIView * myView1;
    UIView * myView2;
}
@end

@implementation ViewController8

- (void)viewDidLoad {
    [super viewDidLoad];

    myView1 = [[UIView alloc] init];
    myView1.backgroundColor = [UIColor lightGrayColor];
    myView1.translatesAutoresizingMaskIntoConstraints = NO;
    [self.view addSubview:myView1];

    myView2 = [[UIView alloc] init];
    myView2.backgroundColor = [UIColor redColor];
    myView2.translatesAutoresizingMaskIntoConstraints = NO;
    [self.view addSubview:myView2];

    [self operation2];
}

-(void)operation2
{
    //Applying autolayouts for myview2

    [self.view addConstraint:[NSLayoutConstraint constraintWithItem:myView2
                                                          attribute:NSLayoutAttributeHeight
                                                          relatedBy:NSLayoutRelationEqual
                                                             toItem:nil
                                                          attribute:0
                                                         multiplier:1.0
                                                           constant:50]];

    [self.view addConstraint:[NSLayoutConstraint constraintWithItem:myView2
                                                          attribute:NSLayoutAttributeTrailing
                                                          relatedBy:NSLayoutRelationEqual
                                                             toItem:self.view
                                                          attribute:NSLayoutAttributeTrailing
                                                         multiplier:1.0
                                                           constant:-10]];

    [self.view addConstraint:[NSLayoutConstraint constraintWithItem:myView2
                                                          attribute:NSLayoutAttributeBottom
                                                          relatedBy:NSLayoutRelationEqual
                                                             toItem:self.view
                                                          attribute:NSLayoutAttributeBottom
                                                         multiplier:1.0
                                                           constant:-30]];

    //Applying autolayouts for myview1

    [self.view addConstraint:[NSLayoutConstraint constraintWithItem:myView1
                                                          attribute:NSLayoutAttributeLeading
                                                          relatedBy:NSLayoutRelationEqual
                                                             toItem:self.view
                                                          attribute:NSLayoutAttributeLeading
                                                         multiplier:1.0
                                                           constant:10]];

    [self.view addConstraint:[NSLayoutConstraint constraintWithItem:myView1
                                                          attribute:NSLayoutAttributeHeight
                                                          relatedBy:NSLayoutRelationEqual
                                                             toItem:nil
                                                          attribute:0
                                                         multiplier:1.0
                                                           constant:50]];

    [self.view addConstraint:[NSLayoutConstraint constraintWithItem:myView1
                                                          attribute:NSLayoutAttributeTrailing
                                                          relatedBy:NSLayoutRelationEqual
                                                             toItem:myView2
                                                          attribute:NSLayoutAttributeLeading
                                                         multiplier:1.0
                                                           constant:-30]];

    [self.view addConstraint:[NSLayoutConstraint constraintWithItem:myView1
                                                          attribute:NSLayoutAttributeBottom
                                                          relatedBy:NSLayoutRelationEqual
                                                             toItem:self.view
                                                          attribute:NSLayoutAttributeBottom
                                                         multiplier:1.0
                                                           constant:-30]];
}

enter image description here

最佳答案

您发布的代码中不存在等宽约束。尝试添加这个

[self.view addConstraint:[NSLayoutConstraint constraintWithItem:myView1
  attribute:NSLayoutAttributeWidth 
  relatedBy:NSLayoutRelationEqual 
  toItem:nil 
  attribute:NSLayoutAttributeNotAnAttribute 
  multiplier:1.0 
  constant:200]];


[self.view addConstraint:[NSLayoutConstraint constraintWithItem:myView2
  attribute:NSLayoutAttributeWidth 
  relatedBy:NSLayoutRelationEqual 
  toItem:myView1
  attribute:NSLayoutAttributeWidth 
  multiplier:1.0 
  constant:0]];

关于ios - 如何使用自动布局为 UIViews 设置相等的宽度 "Constraint with item format",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32484419/

相关文章:

ios - 如何以编程方式添加具有动态宽度的约束

iphone - 为什么在 initWIthCoder :(NSCoder *)aDecoder? 中调用时未设置我的 UIView 图层属性

iphone - Cocoa Touch 是否有与 Adob​​e Flex 的 HBox 或 VBox 等效的 UIView 或组件?

ios - 在 url 中加载带有哈希的网站

objective-c - Xcode 10 警告 "unexpected C compiler invocation with specified output"

iphone - 如何在iOS中实现类似安卓手机(默认)的裁剪功能?

ios - Swift - 将 subview 从 xib 加载到 UIScrollView 后,滚动不起作用并且 subview 超出范围

iOS,向应用程序添加框架,影响性能

ios - YTPlayerView 在更改帧/方向时加载

ios - 如何访问已在 block 内分配的对象?