UIActivityViewController有一个奇怪的大小和形状

时间:2016-03-04 20:24:41

标签: ios iphone uiactivityviewcontroller

我刚收到这个错误报告给我应用...活动视图控制器突然出现这种奇怪的狭窄形状,无论我是在实际手机还是视图控制器上。

Narrow view controller

这种情况发生在一些普通的香草代码中,这些代码几个月来一直未被触及:

UIActivityViewController *activityViewController = [[UIActivityViewController alloc] initWithActivityItems:@[message] applicationActivities:nil];
[self presentViewController:activityViewController animated:YES completion:nil];

可能出现什么问题?我甚至无法想到从哪里开始排除故障。

8 个答案:

答案 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上重现此内容:

  1. 呈现activityViewController的控制器(在本例中为自身)本身具有UIModalPresentationOverFullScreen
  2. 在自身下方的表示链中的某个地方,还有另一个UIActivityAlertViewController。

在我的案例中,解决方案是将自身切换回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)