2

私はユニバーサルアプリケーションを書いています。その結果、XIB/NIB がビュー コントローラーで作成されず、個別に作成され、XIB のクラス名を適切なビュー コントローラーのクラス名に設定することでビュー コントローラーにリンクされるように設定しました (およびファイルの所有者のビューを XIB のビューにリンクします)。次に、View Controller が初期化されるときに、次のように適切な XIB/NIB (iPhone または iPad) を読み込みます。

SomeViewController *vc = [[SomeViewController alloc] initWithNibName:@"SomeView-iPhone" bundle:nil];
[self.navigationController pushViewController:vc animated:YES];
[vc release];

さらに、iphone バージョンは、下部に UITabBarController があり、上部に UINavigationController が設定されています。それは次のように作成されます。

MyAppDelegate *appDelegate = (MyAppDelegate *)[UIApplication sharedApplication].delegate;
UINavigationController *localNavigationController;
UITabBarController *tabBarController = [[UITabBarController alloc] init];
NSMutableArray *localControllersArray = [[NSMutableArray alloc] init]; 

//setup the first tab
FirstViewController *vc = [[FirstViewController alloc] initWithNibName:@"FirstView-iPhone" bundle:nil];
localNavigationController = [[UINavigationController alloc] initWithRootViewController:vc];
[localControllersArray addObject:localNavigationController];
[localNavigationController release];
[vc release];

//setup the second tab
SecondViewController *vc = [[SecondViewController alloc] initWithNibName:@"SecondView-iPhone" bundle:nil];
localNavigationController = [[UINavigationController alloc] initWithRootViewController:vc];
[localControllersArray addObject:localNavigationController];
[localNavigationController release];
[vc release];

....

//set the controllers onto the tab bar
tabBarController.viewControllers = localControllersArray;
[localControllersArray release];    

[appDelegate.window setRootViewController:tabBarController];
[tabBarController release];  

すべてが完全に正常に機能します。iPhone のビューは正常に表示され (タブ バーとナビゲーション バーが機能しています)、ナビゲーションも正常に機能します。ここで奇妙なことが起こります (2 つのドラゴンが奇妙です)。

- IB に配置されているほとんどの UI 要素 (ラベル、ボタンなど) は正常に表示されます
- コードで UIScrollView を作成してビューに追加すると、正常に表示されます
- IB で UIScrollView を作成して配置すると、正常に表示されますビューでは、設計時に IB に表示される場所から実行時に 93 ピクセル分転置されます- IB で
UIScrollView を別のビューとして作成し、それをコードでメイン ビューに追加すると、93 で転置されますピクセル。

言い換えれば、私がこれを行うと:

[scrollView setFrame:CGRectMake(0,0,320,100)];
[self.view addSubview:scrollView]; 

次に、コードで作成された UIScrollView の場合は 0,0 に表示されますが、IB で作成された (そして IBOutlet を介して ivar にリンクされている) UIScrollView の場合は (0,-93) に表示されます。たまたま 93 = 44 + 49 となり、これはタブ バーとナビゲーション バーを合わせた高さです。それは明らかに偶然ではありません。

問題は、iOS が IB で作成されたスクロール ビューを実行時にナビゲーション バーとタブ バーの高さだけ移動するのはなぜですか (ただし、UILabel や UIB​​utton などの他の UI 要素ではありません)。

編集:以前にiPhone専用アプリでタブバーとナビゲーションバーを設定するコードを使用しましたが、この問題は発生しなかったため、initWithNibNameを使用してビューコントローラーを初期化することと関係があると思われますXIB ファイルを VC に手動でリンクすること。それが私のユニバーサル アプリとの違いです。

4

1 に答える 1

2

私はそれを解決しました。私はこの質問/回答に出くわしました:

UIView のサイズ/位置が iPhone のように iPad で機能しない

これは、IB で作成されたスクロール ビューがデフォルトで左下隅への自動サイズ設定に設定されていたために発生していました。左上隅にバインドするように切り替えたところ、すべてうまくいきました。変。

于 2012-05-03T17:08:45.390 に答える