0

私はcontainerViewを使用しています。containerViewには多くの奇妙なことがあります。

奇妙なことの1つは、ビューのタイプが単なるUIViewであるということです。では、このビューと他のすべてのサブビューの違いは何ですか?

それから、たくさんのサンプルコードを読んだ後、セットアップを開始しました。

[self.ContainerView addSubview:self.listBusinessViewController.view];// initialize'

その時点で、self.listBusinessViewControllerはすでにselfの子です。つまり、自分には3人の子供がいます。

驚くべきことに、self.listBusinessViewController.viewのフレームサイズは、ContainerViewに自動的にサイズ変更されるのではなく、xibで設定した方法のままです。

私がこれを行う場合:

[self.ContainerView addSubview:self.listBusinessViewController.view];// initialize'
PO(NSStringFromCGRect(self.ContainerView.frame));
PO(NSStringFromCGRect(self.listBusinessViewController.view.frame));
PD(self.listBusinessViewController.view.autoresizingMask);
PD(UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight);

私が得た:

NSStringFromCGRect(self.ContainerView.frame): {{0, 48}, {320, 412}}
NSStringFromCGRect(self.listBusinessViewController.view.frame): {{0, 0}, {320, 480}}
self.listBusinessViewController.view.autoresizingMask: 18
UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight: 18

したがって、ContainerViewの高さは412です。listBusinessViewController.viewの高さは480です。autoresizingMaskは18です。これは、予想どおりです。それはそれが柔軟な幅、高さ、そして柔軟性のない境界線を持っていることを意味します。

では、なぜlistBusinessViewController.viewの高さがスーパービューのように412にならないのでしょうか。

もちろん、私はこれをハイハンドの方法で行うことができます

CGRect frameOfAllChild = CGRectMake(0, 0, self.ContainerView.frame.size.width, self.ContainerView.frame.size.height);
for (UIViewController * child in self.childViewControllers) {
    child.view.frame=frameOfAllChild;

}

ubber allesをコーディングします(少なくともubber xib)。ただし、高さと幅を柔軟にすることの全体的なポイントは、ビューがスーパービューまたはウィンドウを埋めるようにすることです。

私は何かが足りないのですか?

4

1 に答える 1

1

ビューをスーパービューに追加しても、追加されたビューのフレームは変更されません。サブビューが存在するときにビューのサイズが変更された場合、ビューはそのサブビューのサイズのみを変更します。

ストーリーボードでは、コンテナー ビューを埋め込みセグエと共に使用して、別のビュー コントローラーのコンテンツを直接追加できます。ここでは、含まれているView Controllerがサイズに一致するフレームに配置されています。xib (私は使用していませんが、告白しなければなりません) では、それらはレイアウトを支援するためのプレースホルダー以上のものではありません。追加する前に、子ビュー コントローラーのビューのフレームのサイズを変更する必要があります。その後、コンテナのサイズを変更すると、サブビューのサイズが変更されます。

最終的なコード スニペットは次のように記述したほうがよいでしょう

child.view.frame = self.ContainerView.bounds;
于 2012-10-16T06:20:57.107 に答える