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 サイズを設定する方法についての質問に従って。2 つの異なる方法を使用して制約を設定できます。ビューを作成し、サブビューをスーパービューに追加しました。

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 に答える