在 iOS 7 上以横向模式处理 UIActivityViewController 后视图边界发生变化
Posted
技术标签:
【中文标题】在 iOS 7 上以横向模式处理 UIActivityViewController 后视图边界发生变化【英文标题】:view bounds change after disposing UIActivityViewController on iOS 7 in landscape mode 【发布时间】:2013-11-28 13:38:03 【问题描述】:我在使用 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 中的错误吗?还是只有我做错了什么?
【问题讨论】:
【参考方案1】:根据UIActivityViewController Class Reference UIActivityViews 应该出现在popovers中:
讨论
[...] 在 iPad 上,您必须在弹出窗口中显示视图控制器。在其他设备上,您必须以模态方式呈现。
当我将UIActivityViewController
放入弹出框时,我的问题似乎得到了解决。
经验教训:我应该更频繁地阅读类引用;)
【讨论】:
【参考方案2】:在 iOS7 中,您的控制器通常与导航栏重叠。 尝试将此方法添加到您的控制器:
- (UIRectEdge) edgesForExtendedLayout
return UIRectEdgeNone;
您的导航控制器也与 satatusbar 重叠。 最近使用系统控制器会导致大量未记录的行为。
附:为什么要从 self.navigationController 呈现活动控制器,而不是从 self 呈现?
【讨论】:
感谢您的回答。可悲的是,edgesForExendedLayout
也不起作用。从 self.navigationController 展示它只是为了测试这是否与我的问题有关 - 我在我的问题中更改了它。以上是关于在 iOS 7 上以横向模式处理 UIActivityViewController 后视图边界发生变化的主要内容,如果未能解决你的问题,请参考以下文章
在 iPhone 的 iOS 7 中打开相机时横向模式下的方向问题
在 ios 8 中以横向模式隐藏并在 xCode 6 中发布 ios 8 后尝试在 ios 7 中正常工作的状态栏问题