私はちょうど私がのUIViewControllerのルートビューとしてUIScrollViewのを置く場合は次のように述べている。UIScrollViewのとUINavigationControllerの相互作用
- (void)loadView
{
self.view = [[UIScrollView alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame]];
}
を私は自由のための行動の多くを得る:scrollViewを設定した場合、それは自動的にcontentInset
とscrollIndicatorInsets
ですステータスバー、ナビゲーションバー、またはツールバー存在し、半透明であり、かつ任意のナビゲーションのレイアウトが変更された場合のプロパティを更新します。
[self.navigationController setNavigationBarHidden:YES animated:YES];
残念ながらスクロールビューはまた、contentOffset
AUTOMAによる変更contentsInset
を変更すると、ナビゲーションバーが消えると内容が上がり、ナビゲーションバーが表示されたら内容が上がります。
私はこの自由な振る舞いが大好きですが、ナビゲーションバーが来ても内容が変わらないようにしたいのですが、どこで変更を避けるべきかわかりません。contentOffset
。
編集:いくつかのスタックトレースの後、私は自動的に調整されたオフセットたびに呼び出されるメソッドを発見し
:[UIScrollView(Static) _adjustContentOffsetIfNecessary]
を。しかし、私はこの方法についての文書を見つけることができないので、私は迷っています。
I持つすべてのViewControllerのルートビューのサブビューとしてscrollViewを使って手動で作業した機能。ナビゲーションバーを表示したり隠したりするときに、手動で 'contentsInset'を手動で設定します。私はコンテンツを適切に保持したいので、' contentOffset'を変更しないでください。私が知りたいのは、スクロールビューをルートビューとして持つ自動機能を使用して、コンテンツを所定の位置に維持できるかどうかです。 – Yamanqui
私はこれが可能ではないと思います...私が考えることができる他の唯一のものは、UIScrollViewをサブクラス化して 'setContentOffset:'をオーバーライドし、文書を移動させたい場合は '[super setContentOffset:offset]'を呼び出します。ところで、アンダースコアで始まるすべてのメソッドはプライベートAPIです。あなたがそれらを使って何かをすれば、あなたのアプリケーションはApp Storeに受け入れられません... – jjv360