5

以下は、didFinishLaunchingWithOptions のアプリ デリゲートからの私のコードです。

    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
self.viewController = [[ViewController alloc] initWithNibName:@"ViewController" bundle:nil];

CGRect windowFrame = self.window.frame;
UIView *bottomView = [[UIView alloc] initWithFrame:CGRectMake(0, windowFrame.size.height-100, windowFrame.size.height, windowFrame.size.height)];
bottomView.backgroundColor = [UIColor redColor];
[self.window addSubview:bottomView];

//    self.viewController.view.frame = CGRectMake(0, 0, windowFrame.size.width, windowFrame.size.height-100);

self.window.rootViewController = self.viewController;
[self.window makeKeyAndVisible];

return YES;

私のViewControllerはFreeFormで、その高さは約245です。ご覧のとおり、高さ100ポイントのボトムビューを配置しようとしています。

私はこれを学ぼうとしているだけです。

しかし、ビューは常に画面全体を埋め尽くします。View ControllerをWindows rootviewcontrollerとして設定することをコメントアウトすると、画面にbottomviewが表示されます。

私は何を間違っていますか?ご意見をお聞かせください。

ありがとう。

4

3 に答える 3

3

それ以外の

self.window.rootViewController = self.viewController; 

コーディングするとき

[self.window addSubview:self.viewController.view]; 

期待どおりの結果が得られ、フリーフォームのサイズが決まりました。

rootviewcontroller として設定すると、XIB で設定されたフリーフォーム サイズに関係なく、使用可能な画面全体に表示されます。

于 2013-02-09T05:55:38.093 に答える
2

一文だけ書く

[self.window bringSubviewToFront: bottomView];

また

、としてウィンドウにbottomViewを追加します

[[[[UIApplication sharedApplication] delegate] window] addSubview:bottomView];
于 2013-02-09T04:31:03.590 に答える
0

なぜこれをやろうとしているのかはわかりませんが、IB のフリーフォーム設定 (少なくとも xib ファイルの場合) は、レイアウトのみを目的としているようです。ビューがロードされたときに得られるサイズには実際には影響しません。短くしたい場合は、アプリのデリゲートではなく、ViewController の viewDidAppear: メソッドでフレームを設定します。ビューはまだロードされていないため、フレームを設定するには時期尚早です。

于 2013-02-09T05:19:53.233 に答える