如何以编程方式使用AutoLayout将UIView设置为与SuperView相同的宽度?

时间:2015-01-14 08:50:16

标签: uiview xamarin.ios ios-autolayout

我有一个简单的UIView,我想要与包含View的宽度相同的宽度。我想以编程方式执行此操作。

我可以在包含View中添加一个约束,使SubView的宽度等于容器的宽度。 C#是因为我使用的是Xamarin iOS,但这个AutoLayout问题并不是特定的。

View.AddConstraint(NSLayoutConstraint.Create(subView, 
                                             NSLayoutAttribute.Width, 
                                             NSLayoutRelation.Equal, 
                                             this.View, 
                                             NSLayoutAttribute.Width, 
                                             1.0f, 0.0f));

然而,从SubView中控制它更自然,因为它的视图始终是全宽的。我该怎么做?

当我尝试从SubView中创建约束时,我使用this.SuperView作为Relation但它不起作用。它抛出以下异常

  

NSInternalInconsistencyException原因:意外使用内部   布局属性。

2 个答案:

答案 0 :(得分:3)

当我尝试添加一个涉及我尚未附加的superview的约束时,我得到了相同的NSInternalInconsistencyException。所以也许请确保先附加到超级视图。

答案 1 :(得分:1)

根据你的问题,如何设置类似于superView的UIView大小。 您可以使用两种不同的方式设置约束。 我创建了视图并将其子视图添加到superView。

UIView *redView;
redView = [UIView new];
[redView setBackgroundColor:[UIColor redColor]];
[redView setAlpha:0.75f];
[redView setTranslatesAutoresizingMaskIntoConstraints:NO];
[self.view addSubview:redView];
[self.view setBackgroundColor:[UIColor blackColor]];

1。)使用视觉格式。

NSDictionary *dictViews = @{@"red":redView};
[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-0-[red]-0-|" options:0 metrics:0 views:dictViews]];
[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-0-[red]-0-|" options:0 metrics:0 views:dictViews]];

2.。)使用布局属性。 这里constraintWithItem:redView - 是我们想要设置约束的子视图,toItem:self.view - 超出了我们需要设置约束的超级视图。

[self.view addConstraint:[NSLayoutConstraint constraintWithItem:redView attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeHeight multiplier:1.0 constant:1.0]];
[self.view addConstraint:[NSLayoutConstraint constraintWithItem:redView attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeWidth multiplier:1.0 constant:1.0]];
[self.view addConstraint:[NSLayoutConstraint constraintWithItem:redView attribute:NSLayoutAttributeCenterX relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeCenterX multiplier:1.0 constant:1.0]];
[self.view addConstraint:[NSLayoutConstraint constraintWithItem:redView attribute:NSLayoutAttributeCenterY relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeCenterY multiplier:1.0 constant:1.0]];

希望这会对你有所帮助。快乐的编码。