在横向模式下在iOS 7上部署UIActivityViewController后,视图边界发生了变化

时间:2013-11-28 13:38:03

标签: ios ipad ios7

使用UIActivityViewController时我有一个奇怪的行为:

我有一个带共享按钮的UIViewController(768x704)。当我点击分享按钮时,会打开UIActivityView。关闭ActivityView后,我的导航栏(或视图控制器本身)会更改其大小。

以下是代码:

NSLog(@"Old bounds: %@",NSStringFromCGRect(self.view.bounds));

UIActivityViewController* activityViewController = [[UIActivityViewController alloc] initWithActivityItems:[NSArray arrayWithObject:shareText] applicationActivities:nil];
[activityViewController setCompletionHandler:^(NSString *activityType, BOOL completed){
    NSLog(@"New bounds: %@",NSStringFromCGRect(self.view.bounds));
}];

[self presentViewController:activityViewController animated:YES completion:^{}]; 

输出:

Old Bounds: {{0, 0}, {768, 704}}
New Bounds: {{0, 0}, {768, 724}}

似乎是状态栏的高度。

这仅适用于iOS 7,在横向模式下的iPad上。任何其他情况都很有效 - 没有任何故障。

这可能是iOS7中的错误吗?或者只是我,做错了什么?

2 个答案:

答案 0 :(得分:4)

根据UIActivityViewController Class Reference UIActivityViews应该在popovers中呈现:

  

<强>讨论

     

[...]在iPad上,您必须在弹出窗口中显示视图控制器。在其他设备上,您必须以模态方式呈现它。

当我将UIActivityViewController放入popover时,我的问题似乎已得到解决。

经验教训:我应该更多地阅读课程参考文献;)

答案 1 :(得分:0)

在iOS7中,您的控制器通常是重叠的导航栏。 尝试将此方法添加到您的控制器:

- (UIRectEdge) edgesForExtendedLayout
{
    return UIRectEdgeNone;
}

您的导航控制器也与satatusbar重叠。 最近使用系统控制器导致大量无证行为。

P.S。为什么要从self.navigationController呈现活动控制器而不是从self?

呈现它?