Ios 为什么我的约束不起作用?网间网操作系统

Ios 为什么我的约束不起作用?网间网操作系统,ios,nslayoutconstraint,Ios,Nslayoutconstraint,我只是想在imgView上设置一个宽度和高度约束。我有以下代码: UIImageView *imgView = [[UIImageView alloc] init]; imgView.center = self.view.center; imgView.image = [UIImage imageNamed:@"favorites5-highlighted.png"]; imgView.contentMode = UIViewContentModeCenter; [self.view addSu

我只是想在imgView上设置一个宽度和高度约束。我有以下代码:

UIImageView *imgView = [[UIImageView alloc] init];
imgView.center = self.view.center;
imgView.image = [UIImage imageNamed:@"favorites5-highlighted.png"];
imgView.contentMode = UIViewContentModeCenter;
[self.view addSubview:imgView];

// width constraint
[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:[imgView(==100)]" options:0 metrics:nil views:NSDictionaryOfVariableBindings(imgView)]];

// height constraint
[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:[imgView(==100)]" options:0 metrics:nil views:NSDictionaryOfVariableBindings(imgView)]];
我最终得到了这个错误:无法同时满足约束。 我抬头看了看,试图加上:

imgView.translatesAutoresizingMaskIntoConstraints = NO;

编辑:

我只是尝试将imageView的宽度和高度设置为所需的属性。我第一次尝试使用

CGRect rect = CGRectMake(0, 0, 10, 10);
imgView.frame = rect;
但没有任何变化

两个问题:

  • 您确实想要:

    imgView.translatesAutoresizingMaskIntoConstraints = NO;
    
    您不希望:

    self.view.translatesAutoresizingMaskIntoConstraints = NO;
    
  • 您试图设置
    center
    的尝试是徒劳的,因为当应用约束时,这将丢失。不幸的是,您没有定义约束来定义图像视图的位置。您可以使用下面块的最后两行执行此操作:

    UIImageView *imgView = [[UIImageView alloc] init];
    //imgView.center = self.view.center;                                // this does nothing in auto layout
    imgView.image = [UIImage imageNamed:@"favorites5-highlighted.png"];
    imgView.contentMode = UIViewContentModeCenter;
    imgView.translatesAutoresizingMaskIntoConstraints = NO;             // add this line
    [self.view addSubview:imgView];
    
    NSDictionary *views = NSDictionaryOfVariableBindings(imgView);
    
    // width constraint
    
    [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:[imgView(100)]" options:0 metrics:nil views:views]];
    
    // height constraint
    
    [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:[imgView(100)]" options:0 metrics:nil views:views]];
    
    // center align
    
    [self.view addConstraint:[NSLayoutConstraint constraintWithItem:self.view attribute:NSLayoutAttributeCenterX relatedBy:NSLayoutRelationEqual toItem:imgView attribute:NSLayoutAttributeCenterX multiplier:1.0 constant:0]];
    [self.view addConstraint:[NSLayoutConstraint constraintWithItem:self.view attribute:NSLayoutAttributeCenterY relatedBy:NSLayoutRelationEqual toItem:imgView attribute:NSLayoutAttributeCenterY multiplier:1.0 constant:0]];
    

  • 您希望进行什么更改?假设您在
    viewDidLoad
    中添加此代码,则应将最后两行移动到
    viewDidAppear
    以使其生效,此时自动布局已完成其工作,您可以应用更改。
    UIImageView *imgView = [[UIImageView alloc] init];
    //imgView.center = self.view.center;                                // this does nothing in auto layout
    imgView.image = [UIImage imageNamed:@"favorites5-highlighted.png"];
    imgView.contentMode = UIViewContentModeCenter;
    imgView.translatesAutoresizingMaskIntoConstraints = NO;             // add this line
    [self.view addSubview:imgView];
    
    NSDictionary *views = NSDictionaryOfVariableBindings(imgView);
    
    // width constraint
    
    [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:[imgView(100)]" options:0 metrics:nil views:views]];
    
    // height constraint
    
    [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:[imgView(100)]" options:0 metrics:nil views:views]];
    
    // center align
    
    [self.view addConstraint:[NSLayoutConstraint constraintWithItem:self.view attribute:NSLayoutAttributeCenterX relatedBy:NSLayoutRelationEqual toItem:imgView attribute:NSLayoutAttributeCenterX multiplier:1.0 constant:0]];
    [self.view addConstraint:[NSLayoutConstraint constraintWithItem:self.view attribute:NSLayoutAttributeCenterY relatedBy:NSLayoutRelationEqual toItem:imgView attribute:NSLayoutAttributeCenterY multiplier:1.0 constant:0]];