ランドスケープ ビューに移動するときに UITabBar を非表示にするという 1 つの問題に直面しています。Xcode 4.6.1 および iOS 6.1 シミュレーターでアプリを実行している場合、すべて正常に動作しますが、Xcode 5 および iOS 7 シミュレーターでアプリを実行している場合、次の問題に直面します。
私は tabBarController を使用しており、画面の下部に 3 つのタブがあります。タブの 1 つには、縦表示から横表示に切り替える機能があります。tabBars を縦表示で表示する必要がありますが、横表示では非表示にする必要があります。シミュレーターを縦表示から横表示に切り替えると、タブバーは非表示になりますが、下部に空白が表示されます。tabBar の hidden プロパティを NO に変更したところ、空白が Tabbar によるものであることが確認されました。
(self.tabBarController.tabBar.hidden = No;)
横表示で先に空白が来ていた場所にタブバーが見えます。
ランドスケープ ビューを作成している shouldAutorotateToInterfaceOrientation のコードを共有しています。self.tabBarController.view.bounds.size.width の代わりに [UIScreen mainScreen].bounds.size.width を使用しようとしました。また、幅の値をハードコーディングしてみましたが、フレームの幅に変化はありません。
明確にするためにもう 1 つ、なぜランドスケープ ビューをスーパー ビューから削除し、nil にしてから再度描画するのか疑問に思う人がいるとします。これは、アプリが平日を表示するために必要です-月、火、水、およびアプリは別の言語への変更もサポートしています。
したがって、ユーザーが別の言語を選択した場合、これらの曜日ラベルを対応する言語で表示する必要があるため、UILabes が自動的に更新されないため、ビューを削除してから再描画する必要があります。
この問題に関するいくつかの投稿を読みましたが、実際の理由を突き止めることができませんでした。誰かがアイデアを持っている場合は、解決策を提案してください。
まず、このように viewDidLoad() で横向きのビューを作成しています -
_landscapeView = [[MyWeekView alloc]initWithFrame:CGRectMake(0, 0, self.tabBarController.view.bounds.size.height, 320)];
[self.view addSubview:_landscapeView];
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
if (interfaceOrientation == UIInterfaceOrientationLandscapeLeft || interfaceOrientation == UIInterfaceOrientationLandscapeRight) {
displayEmpName.frame = CGRectMake(0, 22.0, self.tabBarController.view.bounds.size.width, 34.0);
_portraitView.hidden = YES;
_landscapeView.hidden = NO;
self.tabBarController.tabBar.hidden = YES;
self.navigationController.navigationBar.hidden = YES;
[[self.tabBarController.view.subviews objectAtIndex:0]setFrame:CGRectMake(0, 0, 480,320)];
dayView.hidden = YES;
[self.view bringSubviewToFront:_landscapeView];
self.navigationItem.leftBarButtonItem = nil;
//LABELS IN SCREEN DO NOT CHANGE ON CHANGING LANGUAGE
//RELOAD THE LANDSCAPE VIEW ONCE DEVICE IS CHANGED TO LANDSCAPE MODE
[_landscapeView removeFromSuperview];
_landscapeView = nil;
_landscapeView = [[MyWeekView alloc]initWithFrame:CGRectMake(0, 0, self.tabBarController.view.bounds.size.width, 320)];
[self.view addSubview:_landscapeView];
}