UIWebview - “打开/复制”对话框以错误的方向打开

时间:2011-12-29 18:24:54

标签: ios uiwebview

我正在做一些旋转的花哨的东西,并从NO返回shouldAutorotateToInterfaceOrientation:。然后,我根据UIWebView手动轮换[UIDevice currentDevice].orientationCached。当我将手指放在链接上时,出现的菜单始终处于PortraitLeft方向,无论设备如何实际定向,无论UIWebView如何定向。

在我看来,链接菜单从视图控制器的主视图中获取其方向,而不是与其关联的UIWebView,并且使其正常运行的唯一方法是返回{来自YES的{​​1}}。

这个假设是否正确?有没有办法控制与链接相关的弹出菜单的方向,或强制它从产生它的-shouldAutorotateToInterfaceOrientation:中取向?

2 个答案:

答案 0 :(得分:1)

我实际上不会手动设置方向,如何在UIWebView中进行操作。而是通过代码强制父视图控制器的方向。

作为类似情况的一个例子,我有一个我开发的应用程序,它在几个视图中显示一个地图。当从纵向旋转到横向时,它以与花卉动画相比的纵向布局以非常不同的方式布局视图。我喜欢它,但有些用户没有,所以我提供了禁用地图旋转的选项。我通过仅将某些旋转能力传递给父视图来做到这一点。因此,如果他们禁用横向,我告诉视图控制器它只能旋转到横向。否则,它可以自由旋转到任何方向,除了颠倒。

足够的解释:这是我用来完成这个的相关代码:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation {
  //Rotate the view if rotation is actually enabled
  if ([self.prefs boolForKey:@"SHOULD_ROTATE"]) {
      return (UIInterfaceOrientationIsLandscape(toInterfaceOrientation) || UIInterfaceOrientationPortrait == toInterfaceOrientation);
  }

  //Rotate it to portrait only if rotation is disabled
  else if (![self.prefs boolForKey:@"SHOULD_ROTATE"]) {
      return (UIInterfaceOrientationPortrait == toInterfaceOrientation);
  }

  //Otherwise, rotate only to portrait (for all views minus the map views)
  else {
      return (UIInterfaceOrientationPortrait == toInterfaceOrientation);
  }
}

我实际上在UITabBarController中实现了它,以便它适用于应用程序中的所有视图和视图控制器,但它只是为UIWebView父视图控制器轻松实现。要点是,如果视图方向与您想要的方向匹配,则返回是或否。对于Web视图,您可能希望通过返回以下内容来布局唯一允许的旋转方向:

return (UIInterfaceOrientationIsLandscape(toInterfaceOrientation)

当然,我还没有讨论过强制视图将视图设置为横向视图,而只讨论了用户转动视图时的视图。所以最好的行动方法就是在初始化视图后手动执行:

[[UIApplication sharedApplication] setStatusBarOrientation:UIDeviceOrientationLandscapeLeft animated:NO]

您必须将其设置为LeftRight才能开始,但如果您实现我之前的代码,则用户可以根据需要在左右之间进行旋转。

这是很多解释,但我认为父视图控制器的这两种方法的组合应该允许您准确地呈现视图。如果您有任何问题,请告诉我们!

答案 1 :(得分:0)

通过“弹出菜单”,您的意思是Action SheetOpen ... Copy按钮?

如果是,那么是的,Action Sheet总是根据顶视图控制器interfaceOrientation呈现自己。因为您在没有控制器更新其interfaceOrientation的情况下自己旋转视图,所以Action Sheet仍然认为它是肖像。