首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在iOS8中: UIPopoverController presentPopoverFromRect不再适用于keyWindow

在iOS8中: UIPopoverController presentPopoverFromRect不再适用于keyWindow
EN

Stack Overflow用户
提问于 2014-07-27 08:20:05
回答 4查看 8.3K关注 0票数 16

正如标题所示,在iOS8中,UIPopoverController presentPopoverFromRect不再适用于UIApplication sharedApplication.keyWindow。(它可以在iOS7中工作)

我验证了以下代码:

代码语言:javascript
复制
TestViewController *test = [[TestViewController alloc] initWithNibName:nil bundle:nil];

if (testPopoverController == nil) {
    testPopoverController = [[UIPopoverController alloc] initWithContentViewController:test];
    testPopoverController.popoverContentSize = CGSizeMake(250, 95*5);


}

CGPoint point = [sender convertPoint:CGPointMake(0, 0) toView:nil];
CGRect rect = CGRectMake(point.x, point.y, 24, 24);

[testPopoverController presentPopoverFromRect:rect inView:[UIApplication sharedApplication].keyWindow permittedArrowDirections:UIPopoverArrowDirectionDown animated:YES];
EN

回答 4

Stack Overflow用户

发布于 2014-09-19 22:50:08

我想出的最好的解决方案是有条件地处理它。如果是在iOS 7上,请使用我们用于在key窗口中显示UIPopoverController的工作代码。如果是在iOS 8上,请使用以下命令:

代码语言:javascript
复制
     viewController.modalPresentationStyle = UIModalPresentationPopover;
     UIPopoverPresentationController *presentationController = viewController.popoverPresentationController;
     [presentationController setDelegate:self];
     presentationController.permittedArrowDirections = 0;
     presentationController.sourceView = [[UIApplication sharedApplication] keyWindow];
     presentationController.sourceRect = [[UIApplication sharedApplication] keyWindow].bounds;

     [viewController setPreferredContentSize:CGSizeMake(320, 480)];
     [parentController presentViewController:viewController animated:YES completion:nil];

这最终与以下功能相同:

代码语言:javascript
复制
     self.popoverController = [[UIPopoverController alloc] initWithContentViewController:viewController];
     [self.popoverController setDelegate:self];
     [self.popoverController setPopoverContentSize:isLandscape() ? CGSizeMake(480*2, 320*2) : CGSizeMake(320*2, 480*2)];
     [self.padPopover presentPopoverFromRect:CGSizeMake(320, 480)
                                      inView:[[UIApplication sharedApplication] keyWindow]
                    permittedArrowDirections:0
                                    animated:YES];
票数 3
EN

Stack Overflow用户

发布于 2014-12-10 04:55:48

在中更改inView参数

代码语言:javascript
复制
[testPopoverController presentPopoverFromRect:rect inView:[UIApplication sharedApplication].keyWindow permittedArrowDirections:UIPopoverArrowDirectionDown animated:YES];

代码语言:javascript
复制
[testPopoverController presentPopoverFromRect:rect inView:"your current View Controller's view" permittedArrowDirections:UIPopoverArrowDirectionDown animated:YES];

并确保它在调度区块中

代码语言:javascript
复制
  dispatch_async(dispatch_get_main_queue(), ^{

});

另外,如果矩形原点n的大小值在边界内,则kip会更改它。

票数 1
EN

Stack Overflow用户

发布于 2014-10-21 17:13:35

请尝试以下链接中的解决方案:http://github.com/werner77/WEPopover

首先,让我们来做这个代码:

代码语言:javascript
复制
if ([viewController respondsToSelector:@selector(setPreferredContentSize:)]) {
    viewController.preferredContentSize = CGSizeMake(200, 300.0f);
} else {
    viewController.contentSizeForViewInPopover = CGSizeMake(200.0f, 300.0f);
}

self.popoverController = [[popoverClass alloc] initWithContentViewController:viewController];

if ([self.popoverController respondsToSelector:@selector(setContainerViewProperties:)]) {
    [self.popoverController setContainerViewProperties:[self improvedContainerViewProperties]];
}

self.popoverController.delegate = self;

[self.popoverController presentPopoverFromRect:[sender bounds]
      inView:sender
      permittedArrowDirections:UIPopoverArrowDirectionUp
      animated:YES];

我希望这能帮到你。它在iOS6-iOS8上进行了测试和工作。

PS。别忘了查看viewDidLoad,并感谢WEPopover库。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24976741

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档