2011-10-22 5 views
2

私はちょうど私がのUIViewControllerのルートビューとしてUIScrollViewのを置く場合は次のように述べている。UIScrollViewのとUINavigationControllerの相互作用

- (void)loadView 
{ 
    self.view = [[UIScrollView alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame]]; 
} 

を私は自由のための行動の多くを得る:scrollViewを設定した場合、それは自動的にcontentInsetscrollIndicatorInsetsですステータスバー、ナビゲーションバー、またはツールバー存在し、半透明であり、かつ任意のナビゲーションのレイアウトが変更された場合のプロパティを更新します。

[self.navigationController setNavigationBarHidden:YES animated:YES]; 

残念ながらスクロールビューはまた、contentOffset AUTOMAによる変更contentsInsetを変更すると、ナビゲーションバーが消えると内容が上がり、ナビゲーションバーが表示されたら内容が上がります。

私はこの自由な振る舞いが大好きですが、ナビゲーションバーが来ても内容が変わらないようにしたいのですが、どこで変更を避けるべきかわかりません。contentOffset

編集:いくつかのスタックトレースの後、私は自動的に調整されたオフセットたびに呼び出されるメソッドを発見し

[UIScrollView(Static) _adjustContentOffsetIfNecessary]を。しかし、私はこの方法についての文書を見つけることができないので、私は迷っています。

答えて

3

[OK]を見つけました。 UIViewControllerには、 'automaticallyAdjustsScrollViewInsets'というプロパティがあり、navigationBarの表示/非表示時にcontentOffsetを変更します。これをnoに設定すると、UIScrollViewの変更を防ぐことができます。

ソース(およびios6溶液):https://stackoverflow.com/a/20325593/936957

0

ナビゲーションバーを隠す/表示するときにコンテンツインセットを設定しようとしましたか?

このよう

隠し:

[self.navigationController setNavigationBarHidden:YES animated:YES]; 
self.view.contentInset = UIEdgeInsetsMake(self.navigationController.navigationBar.bounds.size.height, 0, 0, 0); 

をし、この表示:

[self.navigationController setNavigationBarHidden:NO animated:YES]; 
self.view.contentInset = UIEdgeInsetsMake(0, 0, 0, 0); 

は、私の知る限り contentInsetは、システムによって変更するべきではありません、それはあなたのアプリケーションのレイアウトを変更します...

+0

I持つすべてのViewControllerのルートビューのサブビューとしてscrollViewを使って手動で作業した機能。ナビゲーションバーを表示したり隠したりするときに、手動で 'contentsInset'を手動で設定します。私はコンテンツを適切に保持したいので、' contentOffset'を変更しないでください。私が知りたいのは、スクロールビューをルートビューとして持つ自動機能を使用して、コンテンツを所定の位置に維持できるかどうかです。 – Yamanqui

+0

私はこれが可能ではないと思います...私が考えることができる他の唯一のものは、UIScrollViewをサブクラス化して 'setContentOffset:'をオーバーライドし、文書を移動させたい場合は '[super setContentOffset:offset]'を呼び出します。ところで、アンダースコアで始まるすべてのメソッドはプライベートAPIです。あなたがそれらを使って何かをすれば、あなたのアプリケーションはApp Storeに受け入れられません... – jjv360

関連する問題