質問

ZORTATIONモードのXIBとしてUIViewを持っています。

このビューは、このようなViewControllerにプログラム的に追加されています。

NSArray *nibObjects = [[NSBundle mainBundle] loadNibNamed:@"InputView" owner:self options:nil];
    InputView *inputView = (InputView*)[nibObjects objectAtIndex:0];
    [self.view addSubview:inputView];
.

このビューは、オートレジスト化マスクが適切に設定され、縦向きが縦向きに変わると細かく回転します。

しかし、方向が ランドスケープの場合は、の後にビューを作成している場合、その初期の肖像画方向があります。

そのマスクを使用して自分自身を縦向きに初期化またはサイズ変更するように見える方法はありますか?

返信のために事前にありがとう!

編集: OcculusとInderの提案を使用してKumar Rathore(皆様!)、私はこれにコードを変更しました:

InputView *inputView = (InputView*)[nibObjects objectAtIndex:0];
[self.view addSubview:inputView];
[self.view setNeedsLayout];
[self.view layoutSubviews];
[self.view layoutIfNeeded];
UIDeviceOrientation orientation = [[UIDevice currentDevice] orientation];
[self shouldAutorotateToInterfaceOrientation:orientation];
.

残念ながら、まったく変化はありません。 私は同じ質問をする誰かが尋ねるのを見つけたと思います:

サブビューを追加するときは、アプリがランドスケープモードの場合はサイズ変更されません

回答は問題を正しく識別しますが、あまり励ましていません... もちろん、2つのペン数を作成したり、フレームのサイズを変更することができますが、これは自動的にサイズ変更のアイデアに反しているようです。 目覚めていて、それを自動的に使用するビューにそれを追加した後にNIBに伝える方法がないと思います。デバイスが回転したときに完璧に機能するもの。

編集2:

IDZの解決策:

InputView *inputView = (InputView*)[nibObjects objectAtIndex:0];
[self.view addSubview:inputView];
inputView.frame = self.view.bounds;
[inputView show];
.

ありがとう!

役に立ちましたか?

解決

多くの場合、NIB / XIBファイルには、これすべての世話をするUIViewControllerが含まれています。この場合、それらのビューコントローラ(NIB / XIB内)ではないため、ロード後の義務を引き継ぐ必要があります。

layoutSubviewsまたはsetNeedsLayoutを介して直接または間接的に呼び出すことは、デフォルトの実装は何もしないため、ほとんど良くなりません。

入力ビューがself.Viewの範囲を埋めることを想定して、次のようにします。

InputView *inputView = (InputView*)[nibObjects objectAtIndex:0];
[self.view addSubview:inputView];
inputView.frame = self.view.bounds;
[inputView show];
.

サブビューのすべてのサイズ変更マスクは、このように機能するために正しく設定されていて、フレームを調整することができる全境界を埋めたくない場合は、明らかにしてください。

他のヒント

[self.view addSubview:viewSpinner];
viewSpinner.frame = self.view.frame;
[viewSpinner setNeedsLayout];
.

これは私にとって(y)

まだこの問題があるかどうかわかりません。

次のアーキテクチャがあるとしましょう。

  • ウィンドウ
    • subviewcontroller

      (あなたは募集の向きに答えるために正しいQuerootateを実行しました)

      このSubViewControllerには、addSubview関数を呼び出すだけで新しいUiviewControllersのビューを追加します。

      SheoSautoTateで境界操作を実装する代わりに、に実装する必要があります。

      - (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation{
        self.newUIViewController.view.frame = self.view.bounds;
      }
      
      .

      didRotateFromInterface ...はshouldRotateの後に呼び出されます。この関数では、範囲はすでに正しく設定されています。

      このようにあなたはコードごとに多くの操作を必要としません。

この関連質問を見てください:

オートレジこのマスクはiOSで有効になりますか?

SO NIBから新しいビューをロードし、self.viewにサブビューとして追加した後、setNeedsLayoutを呼び出してください。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top