AddSubviewを使用すると問題が発生します。
サンプルコード:
ParentView *myParentView = [[ParentView alloc] initWithNibName:@"ParentView " bundle:nil];
ChildeView *myChildeView = [[ChildeView alloc] initWithNibName:@"ChildeView" bundle:nil];
//... parent frame resized with setFrame lets say to x:0, y:0, W:320, H:411
[[myParentView view] addSubview: [myChildeView view]];
追加されたときの私の子は親よりも大きく、フレームを親の境界にリサイズしません。親で「クリップサブビュー」を使用できず、親フレームのサイズが再度変更されない場合、「サブビューの自動サイズ変更」が機能しないようです。すべての子でsetFrameを使用せずに、サブビューのサイズを親の境界に自動的に変更するプロパティはありますか?
自動レイアウトを使用していない場合、子ビューの自動サイズ変更マスクを設定しようとしましたか?これを試して:
myChildeView.autoresizingMask = (UIViewAutoresizingFlexibleWidth |
UIViewAutoresizingFlexibleHeight);
また、電話する必要があるかもしれません
myParentView.autoresizesSubviews = YES;
フレームが変更されたときに、サブビューのサイズを自動的に変更する親ビューを取得します。
まだ子ビューが親ビューのフレームの外側に描画されている場合は、親ビューがそのコンテンツをクリップしていない可能性が高くなります。それを修正するには、電話してください
myParentView.clipsToBounds = YES;
親ビューのフレームを子ビューにコピーして追加します。その後、自動サイズ変更が機能します。実際には、サイズをコピーする必要がありますCGRectMake(0、0、parentView.frame.size.width、parentView.frame.size.height)
childView.frame = CGRectMake(0, 0, parentView.frame.size.width, parentView.frame.size.height);
[parentView addSubview:childView];
テスト済みXcode 9.4、Swift 4この問題を解決する別の方法は、
override func layoutSubviews() {
self.frame = (self.superview?.bounds)!
}
サブビュークラス。
必要なのはそれだけです
childView.frame = parentView.bounds
UIViews - (void)didMoveToSuperview
メソッドでいつでも実行できます。親に追加または削除されると呼び出されます(削除されるとnilになります)。その時点で、サイズを親のサイズに設定するだけです。その時点から、自動サイズ変更マスクは適切に機能するはずです。