1

ランドスケープ ビューに移動するときに 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];
    }
4

0 に答える 0