6

UIPresentationController を使用してモーダル ビュー コントローラーを提示しています。次の方法を使用して、presentedViewのフレームをcontainViewの境界よりも小さく設定しています:

override func frameOfPresentedViewInContainerView() -> CGRect {
    let myDX = (self.containerView!.bounds.width - 600)/2
    let myDY = (self.containerView!.bounds.height - 600)/2
    return self.containerView!.bounds.insetBy(dx: myDX, dy: myDY)
}

この時点まで、すべてがうまく機能します。

ここで、画面全体を占める現在表示されているモーダル ビュー コントローラーの上に、別のビュー コントローラーをモーダル (デフォルトではカスタム) で表示します。したがって、画面全体をカバーするデフォルトのモーダル ビュー コントローラーの下にカスタム モーダル ビュー コントローラーがあります。

問題は、画面全体をカバーしているトップビューコントローラーを閉じると、カスタムビューコントローラーも画面全体をカバーして表示されることです。カスタム ビュー コントローラーのサイズを同じ (containerView より小さい) に維持したい。これを達成する方法はありますか。

どんな助けでもいただければ幸いです

4

1 に答える 1

17

同じ問題が発生しました。制約を追加しても解決できず、-[UIPresentationController containerViewWillLayoutSubviews]呼び出されるのが遅すぎます (却下アニメーションが完了した後)。

しばらくして、問題は、デフォルトで表示するときに表示中のコントローラービューがビュー階層から削除され、UIModalPresentationFullScreen presentationStyle再度表示する必要があるときに全画面サイズで再度追加されることであることがわかりました。

iOS 8 では 、より小さなコントローラーからプレゼンテーションを行う場合にUIModalPresentationOverFullScreen使用できます。presentationStyleその場合、システムは提示コントローラーのビューを自動的に削除しません。(-[UIViewController viewWillDisappear:]ただし、これを行うと、プレゼンティングコントローラーで呼び出されません)

UIModalPresentationCustomiOS 7 で利用可能なものを使用することもできますが、独自の遷移アニメーションを提供する必要があります。

于 2015-10-28T07:43:30.020 に答える