すべてのカスタムビュー(redView、greenView、yellowView)が互いに下になるように、コンテナビュー(C1)内に3つのカスタムビュー(redView、greenView、yellowView)自動的にレイアウト制約をプログラマチックに使用します。私はコンテナビュー(C1)がサブビューのサイズと同じサイズを取得したいので、出力はこのようにする必要があります。 iOS Autolayoutは兄弟UIViewとプログラム的に比較
赤、緑、黄色の表示は、予期した結果を示すことに過ぎません。実際に私が持っているカスタムビューはこのようなものです。
私はこれを行うには、自動レイアウトを使用しています。これは私のコードです。 RatingsSingleViewは上記の画像に示されている私のカスタムビューです。
@interface ViewController()
@property (weak, nonatomic) IBOutlet UIView *ratingsContainerView;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
UIView *previousTopView = self.ratingsContainerView;
for(int i = 0; i < 3; ++i) {
RatingsSingleView *view = [[RatingsSingleView alloc] init];
view.translatesAutoresizingMaskIntoConstraints = NO;
[self.ratingsContainerView addSubview:view];
NSLayoutConstraint *topConstraint = nil;
if(i == 0) {
// Making the first subview top aligned to the container View top
topConstraint = [NSLayoutConstraint constraintWithItem:view attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:previousTopView attribute:NSLayoutAttributeTop multiplier:1.0 constant:10.0];
} else{
// Making the second and third subview top aligned to the view above it
topConstraint = [NSLayoutConstraint constraintWithItem:view attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:previousTopView attribute:NSLayoutAttributeBottom multiplier:1.0 constant:10.0];
}
NSLayoutConstraint *leftConstraint = [NSLayoutConstraint constraintWithItem:view attribute:NSLayoutAttributeLeft relatedBy:NSLayoutRelationEqual toItem:self.ratingsContainerView attribute:NSLayoutAttributeLeft multiplier:1.0 constant:10.0];
NSLayoutConstraint *rightConstraint = [NSLayoutConstraint constraintWithItem:view attribute:NSLayoutAttributeRight relatedBy:NSLayoutRelationEqual toItem:self.ratingsContainerView attribute:NSLayoutAttributeRight multiplier:1.0 constant:10.0];
[self.ratingsContainerView addConstraint:topConstraint];
[self.ratingsContainerView addConstraint:leftConstraint];
[self.ratingsContainerView addConstraint:rightConstraint];
if(i == 2) {
// Adding last subview bottom to the container View bottom
NSLayoutConstraint *bottomConstraint = [NSLayoutConstraint constraintWithItem:view attribute:NSLayoutAttributeBottom relatedBy:NSLayoutRelationEqual toItem:self.ratingsContainerView attribute:NSLayoutAttributeBottom multiplier:1.0 constant:-10.0];
[self.ratingsContainerView addConstraint:bottomConstraint];
}
previousTopView = view;
}
}
@end
したがって、問題は期待した結果が得られません。コンテナビューを左右の端に固定し、ストーリーボードの高さを0に設定します。上記のコードを実行すると、次の結果が得られます。
いくつかの体は、私がここで間違ってやっているものを私を導く可能性ができます。おかげ
はそう問題は何ですか? –
これはVFLでもっと簡単に行うことができます – Lefteris
私はVFLにはあまり親しまれていません。 – Madu