【问题标题】:How to present UIPopoverController in ios8 on iPad如何在 iPad 上的 ios8 中呈现 UIPopoverController
【发布时间】:2015-02-11 21:15:45
【问题描述】:

在 ios7 中,我可以在 iPad 上毫无问题地呈现 popovercontroller,但在 ios8 it doesn't work 中。我已经在谷歌和这里搜索了解决方案,但没有一个有效。这是我为 ios8 更改的代码:

privateChat = [[PrivateChatViewController alloc] initWithNibName:@"PrivateChatViewController" bundle:nil];
privateChat.delegate = self;
popoverController = [[UIPopoverController alloc] initWithContentViewController:privateChat];
[popoverController setDelegate:self];
//work in ios7
//[popoverController setPopoverContentSize:CGSizeMake(privateChat.view.frame.size.width,privateChat.view.frame.size.height) animated:YES];
//[popoverController presentPopoverFromRect:self.frame inView:self.superview permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];

//为ios8编辑,但不起作用

privateChat.preferredContentSize = CGSizeMake([privateChat.view.superview superview].frame.size.width,[privateChat.view.superview superview].frame.size.height) ;
[popoverController setPopoverContentSize: privateChat.preferredContentSize animated:YES];
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
[popoverController presentPopoverFromRect:self.frame inView:[self.view.superview] permittedArrowDirections:UIPopoverArrowDirectionUp animated:YES];
});

它在 ios8 中不起作用,也没有崩溃。我应该更改或添加什么以使其正常工作?

【问题讨论】:

  • 你的电话有一些不同,首先你在self.superview和第二个self.view.superview上显示popover

标签: ios ipad ios8 xcode6 uipopovercontroller


【解决方案1】:

这是在我的项目中完美运行的代码(iPad ios8 Objective-c), (我遇到了同样的问题,下面的代码解决了我的问题。) 你应该试试这个,

        self.popover = [[UIPopoverController alloc] initWithContentViewController:picker];
        self.popover.delegate=self;
        CGRect popoverRect = [self.view convertRect:[_btnimgProfilePic frame] fromView:[_btnimgProfilePic superview]];

        popoverRect.size.width = MIN(popoverRect.size.width, 100) ;
        popoverRect.origin.x = popoverRect.origin.x;

        // this works properly in my project

            dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.0 * NSEC_PER_SEC)), dispatch_get_main_queue(),
                           ^{
                [self.popover presentPopoverFromRect:popoverRect inView:self.view
                            permittedArrowDirections:UIPopoverArrowDirectionUp
                                            animated:YES];
                            });

希望对你有帮助。

【讨论】:

  • 谢谢,我会用你的代码再次测试,我会告诉它是否有效。
猜你喜欢
  • 2014-12-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-06
  • 1970-01-01
  • 1970-01-01
  • 2019-11-16
  • 1970-01-01
相关资源
最近更新 更多