1

私はUINavigationControllerを持っていて、UIViewControllerの2つのコントローラの親です。特定の時刻に `automaticallyAdjustsScrollViewInsets`を手動でトリガーする

ナビゲーションコントローラのUIToolbarでセグメント化されたコントロールをタップすると、現在の子テーブルコントローラが新しいものとスワップアウトされます。これには、親階層から古いコントローラを削除し、そのビューを親ビューコントローラのサブビューとして削除することが含まれます。

ナビゲーションビューコントローラが最初に提示したときに、私はその1つのアウトを引くとしない第2のテーブルビューコントローラからビューを挿入するとき、それはそのcontentInsetが正しく、しかし、automaticallyAdjustsScrollViewInsetsによって構成された表示される最初のビューコントローラ。

さらに、(UINavigationBarを縮小した)デバイスを回転させて最初のビューコントローラに戻すと、そのcontentInsetが正しくなくなり、正しくスクロールしなくなります。しかし、第2のコントローラは、デバイスの回転の結果としてcontentInsetプロパティが適切に設定されています。

UIViewControllerを手動で強制実行して、必要なときにautomaticallyAdjustsScrollViewInsetsの操作をやり直す方法はありますか?

答えて

1

これは絶対に驚くべきものではありませんが、私はうまくいくソリューションを見つけました。

新しい子ビューコントローラを挿入するだけでは、新しい子のスクロールビューに対してUINavigationControllerが適切なcontentInsetの値を自動的に生成するようにはなりません。しかし!とにかくそれを必要とするようなことをすることによって、計算を実行するよう強制することができます。たとえば、ナビゲーションバーまたはツールバーを非表示にして表示します。

- (void)insertViewController:(UIViewController *)viewController 
{ 
    // Add the view to our view 
    viewController.view.frame = self.view.bounds; 
    [self.view addSubview:viewController.view]; 

    // Add the new controller as a child 
    [self addChildViewController:viewController]; 
    [viewController didMoveToParentViewController:self]; 

    // Show and hide the toolbar to force the content inset calculation 
    self.navigationController.toolbarHidden = YES; 
    self.navigationController.toolbarHidden = NO; 
} 

私はそれをテストし、そしてそこに急速にナビゲーションバーやツールバーのいずれかを非表示にすることで、視覚的な不具合はないように見えるので、このソリューションが許容できると思わました。

関連する問題