私のアプリには、ユーザーがアプリについて学ぶためにスワイプするマルチペインのチュートリアルスタイルのビューがあります。これは このチュートリアルで説明 として実装されます。 iOS 7とiOS 8の両方に実装した後、それらの動作を比較し、後者の問題を見つけています。Xcode6 GMここで実行しています。
遷移が完了した後、UIPageViewControllerがビューをレンダリングしているようです。デリゲートメソッドをオーバーライドして、何が起こっているのかを確認しました。
- (void)pageViewController:(UIPageViewController *)pageViewController willTransitionToViewControllers:(NSArray *)pendingViewControllers
{
NSLog(@"Frame size before: %@", NSStringFromCGRect([(UIViewController*)pendingViewControllers[0] view].frame));
}
- (void)pageViewController:(UIPageViewController *)pageViewController didFinishAnimating:(BOOL)finished previousViewControllers:(NSArray *)previousViewControllers transitionCompleted:(BOOL)completed
{
NSLog(@"Frame size after: %@", NSStringFromCGRect([(UIViewController*)previousViewControllers[0] view].frame));
}
次に、出力例を示します。
Frame size before: {{0, 0}, {600, 600}}
Frame size after: {{0, 0}, {320, 568}}
これは次のように現れます。左にスワイプして次のビューを表示し、新しいビューの下部にある32ポイントの空白に注意してください。移行が完了すると、適切なレイアウトになります。
これはおそらくiOS 8のバグですか?私はこの時点ですべて推測外です。
View Controllerのレイアウトガイドではなく、Viewに基づいて制約を設定する必要があることがわかりました。これにより、ViewControllerが、PageViewControllerでの遷移の前に設定した制約を順守するようになります。
次のようにこれを行うことができます:
「マージンに制約」のチェックを外すことを忘れないでください
この問題を抱えている人にとって、私にとっては、「マージンに関連する」ビュー(iOS 8の新機能)をレイアウトしているように見えました。
の代わりに:
つかいます:
私はこれに数日間苦労しました。
ストーリーボードからページViewControllerをインスタンス化して実装しようとしました。明確なサイズ変更が発生していました。フレームサイズを確認する
フレームサイズは、1と3の呼び出し間で常に変化します。 =。時々2の前に、時には後に。
ストーリーボードも使用している場合、ページUI要素を独自のXIBファイルに抽出し、IBで制約を設定してから、initWithNibName。
完全な答えではありませんが、生産性を感じるようになりました。それが役に立てば幸い。
私にとっての解決策は、tableViewの上部をスーパービューに固定することでした:Editor-> Pin-> Top Space To SuperView(iOS8)
これはiOS 8のバグですが、回避策が見つかりました。
ストーリーボードのステータスバーの上に空のビューを追加します。ビューの高さは、移動されるオブジェクトのy値と同じくらいでなければなりません。