web-dev-qa-db-ja.com

addSubviewで追加されたときに親にビューのサイズを変更する

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を使用せずに、サブビューのサイズを親の境界に自動的に変更するプロパティはありますか?

23
Luca

自動レイアウトを使用していない場合、子ビューの自動サイズ変更マスクを設定しようとしましたか?これを試して:

myChildeView.autoresizingMask = (UIViewAutoresizingFlexibleWidth |
                                 UIViewAutoresizingFlexibleHeight);

また、電話する必要があるかもしれません

myParentView.autoresizesSubviews = YES;

フレームが変更されたときに、サブビューのサイズを自動的に変更する親ビューを取得します。

まだ子ビューが親ビューのフレームの外側に描画されている場合は、親ビューがそのコンテンツをクリップしていない可能性が高くなります。それを修正するには、電話してください

myParentView.clipsToBounds = YES;
33
Jeff Kelley

親ビューのフレームを子ビューにコピーして追加します。その後、自動サイズ変更が機能します。実際には、サイズをコピーする必要があります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];
12
cat

テスト済みXcode 9.4、Swift 4この問題を解決する別の方法は、

override func layoutSubviews() {
        self.frame = (self.superview?.bounds)!
    }

サブビュークラス。

5
Zeesha

必要なのはそれだけです

childView.frame = parentView.bounds
3
carmen_munich

UIViews - (void)didMoveToSuperviewメソッドでいつでも実行できます。親に追加または削除されると呼び出されます(削除されるとnilになります)。その時点で、サイズを親のサイズに設定するだけです。その時点から、自動サイズ変更マスクは適切に機能するはずです。

0
Sean