3

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

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

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

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

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

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

4

2 回答 2

3

尝试添加涉及我尚未附加的超级视图的约束时,我得到了相同的 NSInternalInconsistencyException。因此,也许请确保您首先附加到超级视图。

于 2015-02-27T15:59:27.553 回答
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]];

希望这对您有所帮助。快乐编码。

于 2015-01-25T10:00:56.647 回答