我試圖定義附加到一個視圖這樣的酥料餅的觀點:iPhone設備上的Popover演示風格 - 可能還有更多嗎?
這裏是我的代碼:
class MyController: UIViewController, UIPopoverPresentationControllerDelegate {
...
func displaySignOut(_ sender: UIButton) {
let vc = UIStoryboard(name: "Main", bundle: nil)
.instantiateViewController(withIdentifier: "signOutPopover")
vc.modalPresentationStyle = .popover
vc.preferredContentSize = CGSize(width: 100, height: 30)
present(vc, animated: true, completion: nil)
let pc = vc.popoverPresentationController!
pc.sourceView = sender
pc.sourceRect = sender.bounds
pc.delegate = self
}
func adaptivePresentationStyle(for controller: UIPresentationController, traitCollection: UITraitCollection) -> UIModalPresentationStyle {
return .none
}
func adaptivePresentationStyle(for controller: UIPresentationController) -> UIModalPresentationStyle {
return .none
}
}
由於酥料餅是如此之小,我想在所有設備上使用這種風格。我遵循慣常建議(例如,here),覆蓋adaptivePresentationStyle
以返回UIModalPresentationStyle.none
。
這在iPad設備上正常工作,但在iPhone上,它沒有。在較小的iPhone設備上,它始終全屏顯示。在較大的屏幕上(例如iPhone 7 Plus),出現錯誤,但奇怪的是,如果在彈出窗口出現後旋轉設備,則會切換到縱向顯示(縱向和橫向)。 (如果我解僱了酥料餅,並重提這個話題,這是錯的再次直到我旋轉設備)。此外,在景觀是在一個陌生的配置來了(不是全屏幕縱向):
與popover演示文稿不同,如果我在popover視圖本身之外輕敲,這並不會消失。
的Apple documentation說(部分):
在一個水平緊湊的環境,popovers默認適應
UIModalPresentationOverFullScreen
表現風格。
「默認」強烈建議有一種方法來覆蓋此行爲。但是(與this post一致),在委託中重寫adaptivePresentationStyle
似乎不再是這樣做的方式(雖然它曾經工作過)。那麼是否有新的方法來修改默認行爲?
我使用XCode 8.3.3和Swift 3.1,目標iOS 9+。
這很好。我承認,當我第一次看到它時,我認爲這只是我嘗試過的相同代碼的重組,而且它沒有任何不同。但事實並非如此。你能解釋一下爲什麼這個工作時我的代碼沒有? –
我可以在您設置框架的preferredContentSize上看到問題,但不更新super.preferredContentSize中的值。所以在我的代碼中,我也設置了super.preferredContentSize = newValue。這可能是你案件的原因。這有道理嗎? –
我看到這可能是一個影響尺寸的問題。但是在很多情況下,我的版本甚至沒有提供「popover」風格。這不僅僅是大小錯誤。我想知道爲什麼我的版本失敗,你的工作正常。可以設置大小(或不這樣做)導致整個樣式改變? –