UIActivityViewController 在 UIPopoverPresentationController 中呈现时未调整大小

Posted

技术标签:

【中文标题】UIActivityViewController 在 UIPopoverPresentationController 中呈现时未调整大小【英文标题】:UIActivityViewController not resizing when presented in UIPopoverPresentationController 【发布时间】:2016-04-04 13:29:07 【问题描述】:

我有一个 UIActivityViewController,我在 iPad 上的弹出窗口中展示(使用 UIPopoverPresentationController)。

当弹出框最初显示时,它的大小是正确的。当我点击“更多”时,会显示“活动”视图。当我点击“完成”时,UIActivityViewController 不会调整到其初始大小,不幸的是 UIActivityViewController 中的内容不会占据整个视图。

这里是采取的步骤:

显示 UIActivityViewController:

点击“更多”按钮:

弹出框会展开以防止文本被截断。

点击导航栏上的“完成”按钮:

弹出框不会再次调整到其初始大小。

创建和显示 UIActivityViewController 的代码:

- (void)actionButtonTapped:(id)sender 
UIActivityViewController *activityViewController = [[UIActivityViewController alloc] initWithActivityItems:@[self.pdfSummary] applicationActivities:nil];

BOOL canSendMail = [MFMailComposeViewController canSendMail];
NSMutableArray *excluded = [@[UIActivityTypeAddToReadingList,
        UIActivityTypeAssignToContact,
        UIActivityTypeCopyToPasteboard,
        UIActivityTypeMessage,
        UIActivityTypePostToFacebook,
        UIActivityTypePostToFlickr,
        UIActivityTypePostToTencentWeibo,
        UIActivityTypePostToTwitter,
        UIActivityTypePostToVimeo,
        UIActivityTypePostToWeibo,
        UIActivityTypeSaveToCameraRoll] mutableCopy];
if (!canSendMail) 
    [excluded addObject:UIActivityTypeMail];

activityViewController.excludedActivityTypes = excluded;

[self showActivityViewController:activityViewController fromBarButtonItem:sender];

showActivityViewController 方法类似于:

UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:activityViewController];
navController.modalPresentationStyle = UIModalPresentationPopover;
navController.navigationBarHidden = YES;

UIPopoverPresentationController *popoverPresentationController = [navController popoverPresentationController];

popoverPresentationController.permittedArrowDirections = arrowDirection;
popoverPresentationController.barButtonItem = buttonItem;

[self presentViewController:navController animated:YES completion:nil];

return popoverPresentationController;

是否有任何解决方法。调整弹出框的大小还是只保留一个大小?

我已尝试继承 UIActivityViewController 并更改首选内容大小,但 UIActivityController 的内容不会调整大小以适应弹出框的大小

【问题讨论】:

如果我没记错的话,你需要从最顶层的视图控制器中显示这个弹出框。我还认为您需要从委托的完成处理程序中将其关闭。你是如何关闭弹出框的? 您不应该创建自己的导航控制器或弹出框来显示UIActivityViewController 目前@fbara 在点击它外部或选择列表中的项目时将其关闭,但在这里关闭它不是问题。 如何在 iPad @rmaddy 的弹出窗口中显示 UIActivityViewController 直接从UIActivityViewController获取popoverPresentationController并设置它的barButtonItem 【参考方案1】:

不要将活动控制器放入导航控制器中。直接使用活动控制器中的弹出框。

您可以按如下方式更新您的showActivityViewController

UIPopoverPresentationController *popoverPresentationController = [activityViewController popoverPresentationController];

popoverPresentationController.permittedArrowDirections = arrowDirection;
popoverPresentationController.barButtonItem = buttonItem;

[self presentViewController:activityViewController animated:YES completion:nil];

【讨论】:

以上是关于UIActivityViewController 在 UIPopoverPresentationController 中呈现时未调整大小的主要内容,如果未能解决你的问题,请参考以下文章

UIActivityViewController 背景颜色

UIActivityViewController 共享 UIActivity 未显示

UIActivityViewController 不适用于 WKWebView

限制 UIActivityViewController 共享扩展活动

尝试呈现 UIActivityViewController 时崩溃

更改 UIActivityViewController 的 navigationBar 的颜色