5

我使用UIPresentationController呈現模態視圖控制器。我使用下面的方法設置呈現視圖的框架小於包含視圖的邊界:當另一個視圖控制器顯示在其上時,UIPresentationController更改大小

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小)。有什麼辦法可以做到這一點嗎?

任何幫助,將不勝感激

+0

也許你可以使用autoLayout而不是硬編碼的框架尺寸? – Koen

回答

10

我遇到了同樣的問題。我無法通過添加約束來解決它,並且-[UIPresentationController containerViewWillLayoutSubviews]被調用得太晚(在解散動畫完成後)。

經過一段時間後,我發現問題似乎是,當您使用默認的全屏演示文稿樣式呈現時,呈現控制器視圖將從視圖層次結構中刪除,並且必須以全屏幕大小再次添加再次顯示。

在iOS 8中,您可以使用UIModalPresentationOverFullScreen作爲presentationStyle,當從較小的控制器呈現時。系統將不會自動刪除呈現控制器的視圖。 (-[UIViewController viewWillDisappear:]等等,當你這樣做時,不會在提示控制器上調用)

你也可以使用在iOS 7中可用的UIModalPresentationCustom,但是你必須提供你自己的過渡動畫。

相關問題