3 回答

TA貢獻1831條經驗 獲得超4個贊
您可以UIModalPresentationFullScreen使用adaptivePresentationStyleForPresentationController:通過提供的方法來覆蓋默認的自適應行為(在緊湊的水平環境中,即iPhone) UIPopoverPresentationController.delegate。
UIPresentationController使用此方法詢問要使用的新演示文稿樣式,在您的情況下,簡單地返回UIModalPresentationNone將導致UIPopoverPresentationController呈現為彈出窗口而不是全屏。
這是一個使用情節提要中的segue設置的彈出窗口示例,從UIBarButtonItem到“ 模態呈現 ”UIViewController
class SomeViewController: UIViewController, UIPopoverPresentationControllerDelegate {
// override func prepareForSegue(segue: UIStoryboardSegue!, sender: AnyObject!) { // swift < 3.0
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "PopoverSegue" {
if let controller = segue.destinationViewController as? UIViewController {
controller.popoverPresentationController.delegate = self
controller.preferredContentSize = CGSize(width: 320, height: 186)
}
}
}
// MARK: UIPopoverPresentationControllerDelegate
//func adaptivePresentationStyleForPresentationController(controller: UIPresentationController!) -> UIModalPresentationStyle { // swift < 3.0
func adaptivePresentationStyle(for controller: UIPresentationController) -> UIModalPresentationStyle {
// Return no adaptive presentation style, use default presentation behaviour
return .None
}
}
WWDC 2014會議214“ iOS8中的View Controller Advancement”中提到了此技巧(36:30)

TA貢獻2039條經驗 獲得超8個贊
我找到了一些解決方法。
在Xcode6.1上,使用presentationController.delegate代替popoverPresentationController.delegate。
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([segue.identifier compare:@"showPopOver"] == NSOrderedSame) {
UINavigationController * nvc = segue.destinationViewController;
UIPresentationController * pc = nvc.presentationController;
pc.delegate = self;
}
}
#pragma mark == UIPopoverPresentationControllerDelegate ==
- (UIModalPresentationStyle)adaptivePresentationStyleForPresentationController:(UIPresentationController *)controller
{
return UIModalPresentationNone;
}
在WWDC 2014“ iOS8中的View Controller Advances”中,以下代碼可以顯示iPhone上的彈出窗口。
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
UINavigationController * nvc = segue.destinationViewController;
UIPopoverPresentationController * pvc = nvc.popoverPresentationController;
pvc.delegate = self;
}
#pragma mark == UIPopoverPresentationControllerDelegate ==
- (UIModalPresentationStyle)adaptivePresentationStyleForPresentationController:(UIPresentationController *)controller
{
return UIModalPresentationNone;
}
但是在Xcode 6.1上,這些代碼顯示了FullScreen演示...(nvc.popoverPresentationController為nil)
我懷疑這可能是蘋果的錯誤。
- 3 回答
- 0 關注
- 894 瀏覽
添加回答
舉報