0

起動時にルートビューコントローラーをランドスケープモードでロードしています(インターフェイスビルダーは使用されていません)。viewDidLoadで、次のようにルートビューコントローラビューにサブビューを追加しています

- (void)viewDidLoad
{
    [super viewDidLoad];

        // self.view.

    UIView *toolBar=[[UIView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, 50)]; 
    toolBar.backgroundColor=[UIColor darkGrayColor];

    [self.view addSubview:toolBar];
//code contiues...
}

ただし、self.view.frame.size.widthは、横向きではなく縦向きモードの幅を返します。

前もって感謝します

編集: 参考画像

4

3 に答える 3

0

おそらく、縦向きがプロジェクトファイルの最初にあります(クリックしてxcodeでプロジェクトを作成し、ターゲットの情報タブ、ユニットでサポートされているインターフェイスの向き)?その場合、アプリは縦向きで起動し、viewDidLoadを送信して、この後のみ横向きに回転できます。

于 2012-07-11T15:35:38.150 に答える
0

-loadViewメソッドを実装します。

- (void)loadView
{
    self.view = [[UIView alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    self.view.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
}

また、通常、親View Controllerは、子ViewControllerビューのフレームサイズを設定する責任があります。ルートビューコントローラーの場合、接続されているUIWindowのサイズが必要になると思います(したがって、アプリデリゲートでウィンドウサイズを設定する[[UIView alloc] init]と、メソッドで自動サイズ変更マスクを使用して設定できます-loadView)。独自のコードによっては、上記のコードでステータスバーを考慮する必要がある場合があります。

于 2012-07-12T06:43:40.230 に答える
0

Interface Builder / xibファイルを使用せず、内に手動でビューを作成しない場合loadview、システムは最大サイズのビューを作成します。これは、loadviewメソッドのドキュメントに記載されています。

ビューコントローラに関連付けられたnibファイルがない場合、このメソッドは代わりにプレーンなUIViewオブジェクトを作成します。

このシステムで生成されたUIViewオブジェクトには、ID変換ではない変換プロパティがあるため、ここで説明するように、frameプロパティの値に依存することはできません。

http://developer.apple.com/library/ios/documentation/uikit/reference/UIView_Class/UIView/UIView.html#//apple_ref/occ/instp/UIView/transform

警告:このプロパティがID変換でない場合、frameプロパティの値は未定義であるため、無視する必要があります。

だから、代わりに何をすべきですか?最善の解決策は、boundsUIViewのプロパティを使用することだと思います。これには、すでに回転された座標が含まれています。

于 2012-10-11T21:57:09.520 に答える