3

pageViewController:viewControllerAfterViewController: メソッド内で、return ステートメントの直前に、次のページとして返されようとしているビューのビュー フレーム サイズが正しい。

しかし、pageViewController:didFinishAnimating:previousViewControllers:transitionCompleted: メソッドが呼び出された直後に、新しく導入されたビュー コントローラー ([pageViewController2.viewControllers objectAtIndex:0];) のフレーム サイズを確認すると、サイズが変更されていることがわかります。

[self.pageViewController.view setAutoresizedSubviews:NO] を設定し、新しく作成された ViewController の自動サイズ変更マスクを None に設定したことに注意してください。

新しいViewControllerのサイズが変更されているステップはありますか?

4

1 に答える 1

4

この問題は本質的に UIPageViewController の性質に関連していると思います。UIScrollView から構築されます。奇妙なサイズ変更動作がある理由は正確にはわかりませんが、ページを構成するビュー コントローラーが自動レイアウトを使用している場合に特に顕著になるようです。ページビューコントローラーの制約をスーパービューにロックすると、遷移後にスーパービュー自体がサイズ変更されるため、遷移後に要素のサイズが変更されるようです。

Apple は基本的に私たち全員に自動レイアウトを採用するように促しているので、これは最悪です。自動レイアウトは素晴らしいので、これからは全員に使用することをお勧めしますが、UIPageViewController と一緒に使用すると本当に最悪です。彼らは本当にそのクラスを破棄するか、開発者にとってより簡単なもの、ストーリーボードに完全にドラッグできるものを構築する必要があります.

考慮すべき点がいくつかあります。

1.) 「トップ レイアウト ガイド」または「ボトム レイアウト ガイド」に何もロックしないでください。また、画面の端に収まるように意図されたビューでは、「余白に制約」が無効になっていることを確認してください。

2.) 個々のページ/コンテンツ ビュー コントローラーでラベルを使用している場合は、必ずスーパービュー以外のものにバインド/制約してください。UIImageView の上にラベルを配置したかったので、(AutoLayout 制約のみを使用して) ラベルを画像ビューの前縁と上端に揃え、オフセットを作成してラベルに余白を与えました。

3.) それ以外の場合は、次のチュートリアルが適切です。ただし、少し時代遅れです。私はプロジェクトをダウンロードし、基本的にそれを変更して、機能する UIPageViewController 実装を取得しました。このプロジェクトの唯一の問題は、AutoLayout を使用していないことです。私は現在、UIPageViewController と Autolayout を一緒に使用する方法をより明確に説明するブログ投稿を書いています。

http://www.appcoda.com/uipageviewcontroller-storyboard-tutorial/

于 2014-10-13T22:03:48.363 に答える