ここでは抜けているものがあるはずです。私は顧客UIScrollViewController(DataController)によって制御されているUIScrollViewを開いています。ある時点で、ユーザからの入力が必要とされているので、私はDataControllerからモーダルのUIViewControllerを開きます。UIScrollViewの基礎となるモーダルビューの変更を解除する
ElementSelectController *viewController = [[ElementSelectController alloc] initWithNibName:@"ElementSelectController" bundle:nil];
viewController.modalTransitionStyle = UIModalTransitionStyleCoverVertical;
viewController.theDelegate = self;
[self presentModalViewController:viewController animated:YES];
、ユーザがモーダルビューの準備ができたら、それが再び却下されます。これは、DataControllerからも発生します。
[self dismissModalViewControllerAnimated:YES];
これはすべて正常に動作します。 しかし、モーダルビューがなくなると、基礎となるUIScrollViewがフルスクリーンにリサイズされ、位置(0,0)にスクロールされていることがわかります。これは、他の何もしないが、却下される単純なモーダルビューであっても当てはまります。 明らかに、私はUIScrollViewをモーダルビューが出現する前の状態と同じ状態にしておきたいと思います。
私が間違っていることは何ですか?
は、私は(setFrameでブレークポイントを介し:カスタムUIScrollViewのの)UIScrollViewの枠が設定されているスタックトレースをチェックし、から呼び出されたことが表示されます:経由で呼び出され-[UITransitionView transition:fromView:toView:]
、dismissModalViewControllerAnimated呼び出しからのvia。
なぜそれが起こっているのか分かりませんが、モーダルが消えた後はいつでもUIScrollView contentOffsetを保存してリセットすることができます。 – NWCoder
viewwillappearからあなたのコードのいくつかを表示してください... –
ありがとう。それが私が現在回避策としてやっていることです。フレームとUIScrollViewのcontentOffsetを保存し、dismiss呼び出しの直後にそれらをリセットします。それはうまくいくようですが、ハックのように感じます。私はこれを処理する通常の方法が何であるか知りたいと思うでしょう。 – fishinear