A Day In The Life

とあるプログラマの備忘録

画面の表示が切れる

AppDelegateオブジェクトでUIViewControllerのインスタンスを生成してaddSubViewすると画面表示が切れるという現象に悩まされてます。
表示が切れる

@interface AppDelegate : NSObject {
    UIWindow *window;
    UIViewController *viewController;
}
@property (nonatomic, retain) IBOutlet UIWindow *window;
@property (nonatomic, retain) UIViewController *viewController;
@end

@implementation AppDelegate
@synthesize window;
@synthesize viewController;
- (void)applicationDidFinishLaunching:(UIApplication *)application
{
    UIViewController *aViewController = [[UIViewController alloc]
               initWithNibName:@"HogeControllerView" bundle:[NSBundle mainBundle]];
    self.viewController = aViewController;
    [aViewController release];

    [window addSubview:[viewController view]];
    [window makeKeyAndVisible];
}
@end

よくサンプルで見かけるありふれたコードなんですがこれだと画面表示が切れてしまいます。
原因がまったくわからずInterface Builder(以下IBと略)のWindowとかViewとかをいろいろいじくりたおしても直りませんでした。
結局UIViewControllerの生成をIBで行うことでこの現象を回避しました。

修正方法

  • コードを以下のように修正する
@interface AppDelegate : NSObject {
    UIWindow *window;
    UIViewController *viewController;
}
@property (nonatomic, retain) IBOutlet UIWindow *window;
@property (nonatomic, retain) IBOutlet UIViewController *viewController;
@end

@implementation AppDelegate
@synthesize window;
@synthesize viewController;
- (void)applicationDidFinishLaunching:(UIApplication *)application
{
    [window addSubview:[viewController view]];
    [window makeKeyAndVisible];
}
@end
  • MainWindow.xibを開く
  • UIViewControllerを追加
  • UIViewControllerオブジェクトを選択しnibファイルを指定する
  • AppDelegateとUIViewControllerを接続する

回避できたものの原因がまったくわからないのでなんかしっくりきません。

2008/10/28追記

AutoResizeが怪しいと思っていろいろいじってみましたがダメでした。