iOS 13.5.1:UIActivityViewController 未在 iPad 上显示
iOS 13.5.1: UIActivityViewController not showing on iPad
以下代码在 iOS 13.5.1 上的 iPhone 和 iOS 12.4.7 上的 iPad 上运行良好,但在触发时没有任何反应iOS 上的 iPad 13.5.1:
- (void)notificationFired:(NSNotification *)notification {
if (notification != (id)[NSNull null] && [[notification name] isEqualToString:@"OpenActionSheet"]) {
NSString *path = [notification userInfo][@"path"];
printf("Received path: %s", path.UTF8String);
NSURL *url = [NSURL fileURLWithPath:path];
UIActivityViewController *controller = [[UIActivityViewController alloc] initWithActivityItems:@[url] applicationActivities:nil];
[controller setCompletionWithItemsHandler:^(NSString *activityType, BOOL completed, NSArray *returnedItems, NSError *activityError) {
printf("%s", "Share sheet closed");
UnitySendMessage("ShareListener", "Complete", path.UTF8String);
}];
if (IDIOM == IPAD)
controller.modalPresentationStyle = UIModalPresentationPopover
[self.window.rootViewController presentViewController:controller animated:YES completion:nil];
if (IDIOM == IPAD) {
UIPopoverPresentationController *popover = controller.popoverPresentationController;
popover.sourceView = self.window.rootViewController.view;
}
}
}
我也试过了
if ([controller respondsToSelector:@selector(popoverPresentationController)])
controller.popoverPresentationController.sourceView = self.rootView;
[self.window.rootViewController presentViewController:controller animated:YES completion:nil];
而不是 IDIOM == IPAD
块,但结果相同。我错过了什么?
除了分配 sourceView
,您还应该分配 sourceRect
喜欢
popover.sourceRect = CGRectMake(0, 0, 100, 100) // change the rect to the frame you want the view to appear
希望它能解决您的问题。在 iPad Pro(12.9 英寸)(第 4 代)XCode 11.5.
中测试
以下代码在 iOS 13.5.1 上的 iPhone 和 iOS 12.4.7 上的 iPad 上运行良好,但在触发时没有任何反应iOS 上的 iPad 13.5.1:
- (void)notificationFired:(NSNotification *)notification {
if (notification != (id)[NSNull null] && [[notification name] isEqualToString:@"OpenActionSheet"]) {
NSString *path = [notification userInfo][@"path"];
printf("Received path: %s", path.UTF8String);
NSURL *url = [NSURL fileURLWithPath:path];
UIActivityViewController *controller = [[UIActivityViewController alloc] initWithActivityItems:@[url] applicationActivities:nil];
[controller setCompletionWithItemsHandler:^(NSString *activityType, BOOL completed, NSArray *returnedItems, NSError *activityError) {
printf("%s", "Share sheet closed");
UnitySendMessage("ShareListener", "Complete", path.UTF8String);
}];
if (IDIOM == IPAD)
controller.modalPresentationStyle = UIModalPresentationPopover
[self.window.rootViewController presentViewController:controller animated:YES completion:nil];
if (IDIOM == IPAD) {
UIPopoverPresentationController *popover = controller.popoverPresentationController;
popover.sourceView = self.window.rootViewController.view;
}
}
}
我也试过了
if ([controller respondsToSelector:@selector(popoverPresentationController)])
controller.popoverPresentationController.sourceView = self.rootView;
[self.window.rootViewController presentViewController:controller animated:YES completion:nil];
而不是 IDIOM == IPAD
块,但结果相同。我错过了什么?
除了分配 sourceView
,您还应该分配 sourceRect
喜欢
popover.sourceRect = CGRectMake(0, 0, 100, 100) // change the rect to the frame you want the view to appear
希望它能解决您的问题。在 iPad Pro(12.9 英寸)(第 4 代)XCode 11.5.
中测试