我在一个继承自UINavigationController的UIViewController中包含了一个UIWebView。它的样子是这样的:
该应用仅支持竖屏。当播放视频时,我希望用户能够旋转设备并在横屏模式下观看视频。我使用以下代码实现:
- (NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window
{
id presentedViewController = [self topMostController];
NSString *className = presentedViewController ? NSStringFromClass([presentedViewController class]) : nil;
if ([className isEqualToString:@"MPInlineVideoFullscreenViewController"] ||
[className isEqualToString:@"MPMoviePlayerViewController"] ||
[className isEqualToString:@"AVFullScreenViewController"]) {
return UIInterfaceOrientationMaskAllButUpsideDown;
}
return UIInterfaceOrientationMaskPortrait;
}
- (UIViewController *)topMostController {
UIViewController *topController = [UIApplication sharedApplication].keyWindow.rootViewController;
while (topController.presentedViewController) {
topController = topController.presentedViewController;
}
return topController;
}
然后在我的UINavigationController中(这样当视频结束时,视图不会以横向呈现,而是仅以纵向呈现):
- (BOOL)shouldAutorotate
{
return NO;
}
- (NSUInteger)supportedInterfaceOrientations
{
return UIInterfaceOrientationMaskPortrait;
}
- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
{
return UIInterfaceOrientationPortrait;
}
一切运作完美:
但是当视频播放完毕(或用户点击“完成”)并且屏幕返回到底层视图时,会发生以下情况:
如您所见,导航栏滑动到状态栏下面。 此外,日志中出现了很多自动布局错误:http://pastebin.com/09xHzmgJ
有什么解决方法吗?