XCode4.5でiPadプロジェクトを開いたところです。私のアプリはランドスケープモードで実行するように設計されています。以前のバージョンのXCodeで完全に機能します。しかし、XCode 4.5では、画面の右側に空の領域があり、90°(1/4回転)回転します(私のビューは正しいサイズですが、画面の外に出ます)。次のようになります。
次の投稿を確認しましたが、役に立ちませんでした。
誰かがこの問題を抱えていましたか?
どんな助けでもいただければ幸いです!
XCode4.5でiPadプロジェクトを開いたところです。私のアプリはランドスケープモードで実行するように設計されています。以前のバージョンのXCodeで完全に機能します。しかし、XCode 4.5では、画面の右側に空の領域があり、90°(1/4回転)回転します(私のビューは正しいサイズですが、画面の外に出ます)。次のようになります。
次の投稿を確認しましたが、役に立ちませんでした。
誰かがこの問題を抱えていましたか?
どんな助けでもいただければ幸いです!
返信ありがとうございます。私は最終的に解決策を見つけました。
まず、すべての起動画像がターゲットの概要メニューで正しい向きと正しいサイズになっていることを確認します (プロジェクトの青いアイコン => ターゲット => 概要 => 下部にスクロール)。サイズまたは向きが正しくない場合、正しく設定されていない起動イメージに関する警告が表示されます。
今まで、私はこの構造のプロジェクトを持っていました (古い XCode のやり方):
AppDelegate.h
そしてMRootViewController.h
そしてMMainWindow-Iphone.xib
およびMainWindow-iPad.xib
( RootViewController
Interface Builder にリンクされています。以下のスクリーンショットを参照してくださいRootViewController
) 。それがどのように見えるかのスクリーンショットを以下に示します。
そして、私の AppDelegate の applicationDidFinishLaunching: メソッドのコードは次のとおりです。
- (void)applicationDidFinishLaunching:(UIApplication *)application {
[window addSubview:[rootViewController view]];
[window makeKeyAndVisible];
}
私がやったことは、XCode 4.5 で空のプロジェクトを作成したときに得られる構造に近づけることです。その結果:
MainWindow.xib
プログラムMainWindow-iPad.xib
でウィンドウを作成しました(より明確で、どの画面のサイズにも合うようにします)Info.plist
(およびに設定されMainWindow.xib
ていましたMainWindow-iPad.xib
)RootViewController_iPhone.xib
し、RootViewController_iPad.xib
applicationDidFinishLaunching
メソッドのコードを次のように変更しました。
- (void)applicationDidFinishLaunching:(UIApplication *)application {
NSLog(@"applicationDidFinishLaunching");
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {
self.rootViewController = [[RootViewController alloc] initWithNibName:@"RootViewController_iPhone" bundle:nil];
} else {
self.rootViewController = [[RootViewController alloc] initWithNibName:@"RootViewController_iPad" bundle:nil];
}
self.window.rootViewController = self.rootViewController;
[self.window makeKeyAndVisible];
}
そして今、すべてが正常に動作します! 向きは iPad で正しいです。そして、それは以前よりもはるかに明確です:)非推奨のメソッドを変更する必要さえありませんでした
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
ところで、すべてのビューが全画面表示になるようにするには (iPhone 5 の場合)、Interface Builder でビューが [Scale to fill] モードに設定されていることと、[Autoresize subviews] がクリックされていることを確認してください。一部のビューが全画面表示にならない場合は、おそらくコントローラー/ビューを作成する順序が原因です (superView は、それ (superView) が作成されたときにのみサブビューに通知を送信します)。これを簡単に解決するには、次のコードを に追加します- (void)viewDidLoad method
。
CGRect screenBounds = [[UIScreen mainScreen] bounds];
[self.view setFrame:CGRectMake(0,0,screenBounds.size.width,screenBounds.size.height)];
または使用:
[self presentModalViewController:myViewController animated:TRUE];
それ以外の:
[self.view.superview addSubview:myViewController.view];
presentModalViewController
実際、サブビューにサイズ変更通知を送信します。
これが役立つことを願っています!
window.rootViewController も設定していることを確認してください。私は同じ問題を抱えていましたが、この行は私のためにそれを修正しました:
MainViewController *mainView = [[MainViewController alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
window.rootViewController = mainView;
アップグレードしたアプリでも同様の問題が発生しました。文書化されていませんが、変更があったようです。私が見つけたのは、新しいウィンドウがキーになって表示されるまで、回転やサイズを認識していないようだということです。フレーム設定を makeKeyAndVisible の直後に移動でき、すべてが機能しました。お役に立てば幸いです。
[[yourViewController view] setFrame:CGRectMake(0.0, 0.0, 1024.0, 768.0)];
[[yourViewController view] setTransform:CGAffineTransformTranslate(CGAffineTransformMakeRotation(0.5*M_PI),128.0,128.0)];
いくつかの簡単な手順を順番に実行するだけで、この問題を解決できます。
まず、AppDelegate.m で、rootViewController をサブビューとして追加しているかどうかを確認します。つまり、これの代わりに、
- (void)applicationDidFinishLaunching:(UIApplication *)application {
[window addSubview:[navigationController view]];
[window makeKeyAndVisible];
}
このようなことをする
- (void)applicationDidFinishLaunching:(UIApplication *)application {
window.rootViewController = navigationController;
[window makeKeyAndVisible];
}
ルート ビュー コントローラーとしてナビゲーション コントローラーを設定している場合。
次に、navigationController のプッシュされた viewController 内で回転メソッドを制御する必要がある場合は、次のように UINavigationController のカテゴリを作成します。
#import "UINavigationController+Rotation.h"
@implementation UINavigationController (Rotation)
- (BOOL)shouldAutorotate {
BOOL result = self.topViewController.shouldAutorotate;
return result;
}
- (NSUInteger)supportedInterfaceOrientations {
return self.topViewController.supportedInterfaceOrientations;
}
@end
さて、iOS 6 上向きのこれら 2 つの向きの方法
-(BOOL)shouldAutorotateおよび
-(NSUInteger)supportedInterfaceOrientations
クラス内で呼び出されます。
これが必要なのは、
-(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
iOS 6 から廃止されました。
最後に、これらをビュー コントローラーに実装する必要があります。このようなもの:
-(BOOL)shouldAutorotate
{
return YES;
}
-(NSUInteger)supportedInterfaceOrientations
{
return UIInterfaceOrientationMaskAll;
}
ビューコントローラーが回転し、すべての向きをサポートできるようにする場合。
その他の方向マスクは次のとおりです。