我刚收到这个错误报告给我应用...活动视图控制器突然出现这种奇怪的狭窄形状,无论我是在实际手机还是视图控制器上。
这种情况发生在一些普通的香草代码中,这些代码几个月来一直未被触及:
UIActivityViewController *activityViewController = [[UIActivityViewController alloc] initWithActivityItems:@[message] applicationActivities:nil];
[self presentViewController:activityViewController animated:YES completion:nil];
可能出现什么问题?我甚至无法想到从哪里开始排除故障。
答案 0 :(得分:2)
在某些情况下可能会发生。试试这个
NSArray *Items = [NSArray arrayWithObjects:
@"Checking Test App", nil];
UIActivityViewController *activity=[[UIActivityViewController alloc]initWithActivityItems:Items applicationActivities:nil];
[self presentViewController:activity animated:YES completion:nil];
或
NSString *string = NSLocalizedString(@"shareString", nil);
UIActivityViewController *activityViewController = [[UIActivityViewController alloc]
initWithActivityItems:@[string] applicationActivities:nil];
[activityViewController setCompletionWithItemsHandler:
^(NSString *activityType, BOOL completed, NSArray *returnedItems, NSError *error)
{
if ( completed ) {
NSLog(@"sharing complete");
} else
{
NSLog(@"cancelled");
}
}];
[self presentViewController:activityViewController animated:YES completion:^{
}];
答案 1 :(得分:2)
您是否尝试过再现此错误??? 如果我们没有确定如何创建此错误的确切方案,那么我们无法为其制定解决方案!尝试更新数组中的项目并检查错误是否仍然存在......有时会发生这类事情,但除非我们不重现这种情况,否则不能将其称为错误。
如果您在通用应用程序中工作,请在呈现ActivityView
之前添加以下代码行ActivityViewController.popoverPresentationController.sourceView = self.view;
[self presentViewController:activityViewController animated:YES completion:nil];
我会建议,而不是寻找解决方案首先解决问题。在此之前我从未见过如此奇怪的ActivityView行为,如果我们知道为什么会发生这种情况,那么对每个iOS开发人员来说都会有用。
答案 2 :(得分:1)
您应该检查自己视图的帧。可能它的宽度小于 activityViewController 的宽度,你得到这个错误。
答案 3 :(得分:1)
可能self.view.frame.size.width
是问题所在。您可以使用NSLog
self.view
找到相应的框架。简单的解决方法可能是:
[self.view.window.rootViewController presentViewController:activityViewController animated:YES completion:nil];
答案 4 :(得分:1)
这些类型的错误确实会发生,它们确实会测试您的耐心并给您带来挑战。虽然我不能给出明确的答案,但我可以给你一些如何排除故障的提示!
我建议您首先尝试在开发计算机上重新创建它。然后尝试一起玩,看看导致问题的是什么。以下是一些可以尝试的事情。
在具有不同操作系统的多台设备上运行此功能,以便您可以确定模式。
尝试更改" initWithActivityItems
"价值和看
问题是否发生。
如果您尝试创建问题,请查看问题是否存在 来自不同视图控制器的ActivityViewController。
浏览您的代码,看看是否有任何警告 简直忽略了。特别是如果您正在使用Storyboard 创建视图。
我知道这不是答案,但我不能发表这么长的回复作为评论。
希望这有帮助!
答案 5 :(得分:1)
如果您使用的是iPad,请尝试设置popoverPresentationController
sourceRect
属性
NSString *string = NSLocalizedString(@"shareString", nil);
UIActivityViewController *activityVC = [[UIActivityViewController alloc] initWithActivityItems:@[string] applicationActivities:nil];
activityVC.popoverPresentationController.sourceView = self.view;
activityVC.popoverPresentationController.sourceRect = CGRectMake(self.view.bounds.size.width / 2.0, self.view.bounds.size.height-50, 1.0, 1.0);
[self presentViewController:activityVC animated:YES completion:nil];
答案 6 :(得分:0)
在以下情况下,我可以在iOS 12上重现此内容:
在我的案例中,解决方案是将自身切换回UIModalPresentationFullScreen。
答案 7 :(得分:0)
在iPadOS中,您必须设置PopoverPresentationController的 Source View 和 Source Rect 属性。下面的代码可以使ActivityViewController来自屏幕中心,并具有默认大小
对于Swift 5
activityViewController.popoverPresentationController?.sourceView = self.view
activityViewController.popoverPresentationController?.sourceRect = CGRect(x: self.view.bounds.size.width / 2.0, y: self.view.bounds.size.height-50, width: 1.0, height: 1.0)