1

Interface Builder で作成され、向きに応じてサイズが変更されるように構成されたビューがあります。アプリケーションが縦向きモードのときにビューを作成してディスプレイに追加すると、すべてが完全に機能します。その後、デバイス/シミュレーターを回転させると、期待どおりにビューのサイズが変更されます。ただし、アプリが横向きモードのときにビューを追加すると、サイズが正しく変更されません。アプリがまだ縦向きモードであるかのように、ビューが作成され、サイズが変更されます。ビューは次のコードで追加されます。

self.viewController = [[MyViewController alloc] initWithNibName:nibName bundle:bundle];
[self addSubview:self.viewController.view];

ここでは魔法のようなことは何も起きていません。さらに、View Controller は以下を指定します。

- (BOOL) shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    return YES;
}

繰り返しますが、ポートレート モードでビューが追加されている限り、期待どおりに機能します。ビューで autoresizingMask プロパティを手動で設定する、setNeedsLayout を呼び出す、layoutIfNeeded を呼び出すなど、さまざまなことを試しましたが、何も機能していないようです。フレームの幅と高さを手動で設定してビューのサイズを強制的に変更することはできますが、これはビューの動的な性質を壊します。たとえば、幅を手動で設定すると、コンテンツが再レイアウトされないため、高さが調整されません。

何か案は?

4

4 に答える 4

5

このようにサブビューフレームを設定するだけです

self.viewController.view.frame = self.view.bounds;
于 2013-09-23T08:14:04.207 に答える
0

ほぼ同じ質問に対して、これに対する回答を投稿しました。向きの変更後に UIView addsubview を確認する

于 2011-05-14T08:52:41.427 に答える
0

ここでの簡単な回答ですが、これはすでに解決していると思います:) ビューを作成して追加すると、ポートレートフレームを使用してペン先からロードされるためです。ロードするとき、アプリは回転することを意図していることを認識できないため、自動的に回転しません。

いくつかのオプションは次のとおりです。

  1. 縦向きと横向きのペン先を用意し、ビューを追加するときに現在の向きに応じて適切なペン先からロードします。

  2. 以前に行ったように、ロード後にコードを調整します。

再レイアウトを強制するというオプションもあるかもしれませんが、それはあなたが求めているもののように思えます。

HTH

于 2011-03-22T11:06:42.427 に答える
0

これは、あるView Controllerのビューを別のView Controllerに追加するだけで発生します。これは悪い習慣であり、Internalinconsistency 例外につながる可能性があります。WWDC の Container API vedio を参照してください。そのようなことのために、封じ込めAPIが使用されます。

しかし、あなたはまだこのようにしたいと思っています。ビューを追加したら、self.viewController で shouldAutorotateToInterfaceOrientation を呼び出す必要があります。

于 2013-02-25T09:49:16.323 に答える