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条经验 获得超7个赞
我找到了一些解决方法。
在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 关注
- 855 浏览
添加回答
举报