我有一个简单的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原因:意外使用内部 布局属性。
答案 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]];
希望这会对你有所帮助。快乐的编码。