【问题标题】:UIPopoverPresentationController is showing full screen modal on iPhoneUIPopoverPresentationController 在 iPhone 上显示全屏模式
【发布时间】:2016-03-28 06:38:47
【问题描述】:

在 iPad 上 UIPopoverPresentationController 工作正常,但在 iPhone 上它总是显示全窗口模式弹出窗口。我正在使用以下代码:

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
MySecondViewController *contentVC = [storyboard instantiateViewControllerWithIdentifier:@"Pop"];
contentVC.modalPresentationStyle = UINavigationControllerOperationPop; // 13
UIPopoverPresentationController *popPC = contentVC.popoverPresentationController; // 14
contentVC.popoverPresentationController.sourceRect =CGRectMake(100, 130, 280, 230);
self.navigationController.preferredContentSize = CGSizeMake(200, self.parentViewController.childViewControllers.lastObject.preferredContentSize.height-100);
//self.showPop.frame; // 15
contentVC.popoverPresentationController.sourceView =
self.showPop; // 16
popPC.permittedArrowDirections = UIPopoverArrowDirectionAny; // 17
popPC.delegate = self; //18
[self presentViewController:contentVC animated:YES completion:nil];

-(UIModalPresentationStyle)adaptivePresentationStyleForPresentationController:(UIPresentationController *)controller {
    return UIModalPresentationNone;
}

【问题讨论】:

标签: ios objective-c iphone uimodalpresentationstyle


【解决方案1】:

在ViewController.h中首先创建一个UIPopoverPresenatationController的属性。

 @property(nonatomic,retain)UIPopoverPresentationController *dateTimePopover8;

然后显示 PopOverPresentationcontroller

 UINavigationController *destNav = [[UINavigationController alloc] initWithRootViewController:dateVC];/*Here dateVC is controller you want to show in popover*/
            dateVC.preferredContentSize = CGSizeMake(280,200);
            destNav.modalPresentationStyle = UIModalPresentationPopover;
            _dateTimePopover8 = destNav.popoverPresentationController;
            _dateTimePopover8.delegate = self;
            _dateTimePopover8.sourceView = self.view;
            _dateTimePopover8.sourceRect = [sender frame];
            destNav.modalPresentationStyle = UIModalPresentationPopover;
            destNav.navigationBarHidden = YES;
            [self presentViewController:destNav animated:YES completion:nil];

你一定注意到我们是在展示View Controller而不是展示popOver。所以我们也必须以新的方式隐藏它。当我们点击屏幕时它会自动隐藏。

-(void)hideIOS8PopOver
{
    [self dismissViewControllerAnimated:YES completion:nil];
}

我们必须在实现文件中实现 UIPopoverPresenatationController 的委托。在实现文件中写下面的委托方法。

- (UIModalPresentationStyle) adaptivePresentationStyleForPresentationController: (UIPresentationController * ) controller {
    return UIModalPresentationNone;
}

【讨论】:

    【解决方案2】:

    Popover 控制器专用于 iPad 设备。

    编辑:正如 Soberman 所说,从 iOS 8 开始,可以使用公共 API 在 iPhone 上显示弹出框,所以这个答案可能不再相关。

    正如 Apple 关于 UIPopoverController 的文档所述:

    Popover 控制器专用于 iPad 设备。 所以不幸的是,没有办法在 iPhone 应用程序中使用这个类。但是有几个自定义的第三方实现 UIPopoverController 提供的功能,增加了 iPhone 支持等等。例如,请参阅https://github.com/50pixels/FPPopover

    编辑:还有另一种高度可定制的用于 iPhone/iPad 的弹出框实现值得一试:https://github.com/nicolaschengdev/WYPopoverController

    【讨论】:

    • 当然。谢谢。如果您认为它也对其他人有帮助,请投票支持该问题。谢谢。
    • 你问的问题很老了,但无论如何我现在就这样做
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-02-05
    • 2011-12-19
    • 1970-01-01
    • 1970-01-01
    • 2017-05-13
    相关资源
    最近更新 更多