模式视图中的 UIWebview 在横向模式下以纵向显示

Posted

技术标签:

【中文标题】模式视图中的 UIWebview 在横向模式下以纵向显示【英文标题】:UIWebview in a modal view is being shown in portrait in Landscape mode 【发布时间】:2012-10-02 02:43:38 【问题描述】:

我浏览了大部分问题并尝试了几乎所有方法。但不好的部分是问题仍然存在。

我有一个UIVIew,它始终以横向模式启动,我将第二个视图 (detailView) 呈现为全屏模式视图。

detailview 顶部有一个UIwebview

当我将detailView 呈现为模态视图时,webview 以纵向模式显示。

我在shouldAutoRotateToInterfaceOrientation 中返回“YES”并且还设置了autoresizeautoresizingMaskscalePageToFit 属性。

当我旋转设备时,当detailView 在前面时,webview 会正确排列为横向。

问题仅出现在我第一次展示modalView 时。

旋转设备正在正确调整布局。

【问题讨论】:

我也尝试在模态视图的 viewWillAppear 中设置状态栏,即 [[UIApplication sharedApplication] setStatusBarOrientation: self.interfaceOrientation]... 即使这样也行不通 :试试这个 - 创建一个 UIViewController 类的自定义 viewController(比如 - FirstViewController)。在这个 VC 中,支持两个方向(端口和陆地)。然后创建 SecondViewController ,它将是 FirstViewController 的子类,显然在此您将创建具有横向模式的 UIView 并进一步执行与您所做的相同的操作。 终端landscapeportrait 模式与UIViewController 相关,但与UIView 无关。那么你能澄清一下UIWebView的纵向模式下你的意思吗?您使用哪种方法在detailview 之上显示UIWebView 【参考方案1】:

据我所知,iPhone 上的 ModalViews 不支持横向视图。 iPhone 5 的情况可能有所不同。

但听起来您将 ModalView 而不是 WebView 设置为横向,我建议采用不同的方法来处理此问题。

例如,您可以像 ModalView 一样为 DetailView 设置动画,使其以正确的方向开始

【讨论】:

【参考方案2】:

如果您在 ios 6 上运行您的应用,您将需要在模态视图控制器中添加以下代码来支持横向:

- (NSUInteger)supportedInterfaceOrientations 
    return UIInterfaceOrientationMaskLandscape;


- (BOOL) shouldAutorotate 
    return YES;


- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation 
    return UIInterfaceOrientationLandscapeLeft;

此外,请确保您是在实际设备上而不是在模拟器上进行测试,因为自动旋转在模拟器上的行为不同。

【讨论】:

【参考方案3】:

这样就行了:

CGAffineTransform transform = CGAffineTransformIdentity;
webView.transform = CGAffineTransformRotate(transform,-M_PI/2);

【讨论】:

【参考方案4】:

好的。首先,我发布的问题不清楚。我的问题是,当我以纵向加载 webview 时,它以横向模式 (CSS) 加载 webview 元素,并以横向模式 (CSS) 加载。

原来我没有应用正确的 CSS 样式。

我所做的修复是: 在 ViewDidLoad 和 willAnimateRotation 方法中,我将通知发布到我的 javascript 以根据方向更新样式:)

【讨论】:

能否请您显示此代码 - 我遇到了同样的问题,但在涉及 javascript 时不知道 @iOSProgrammingIsFun 你能详细说明你的问题吗?我以前做过这件事。我需要搜索我的代码。 好的,我有一个视图控制器 A,它以模态方式呈现视图控制器 B,并且是全屏样式。 VC B 里面是一个全屏的uiwebview。该网络视图用于显示特定网站 - 比如说***。如果应用程序以纵向运行,则网页将被格式化为纵向并缩放以适应 Web 视图 - 即使在界面构建器中未勾选 scalestofit。我希望在移动 safari 中打开相同的页面,页面的宽度超过屏幕的宽度并且更具可读性,它也可以缩放,而 VC B 中的 webview 则不能。此外,如果 VC B 旋转,页面就会混乱 这样就部分滚出物理屏幕的顶部,不能向下滚动。代码中没有针对不同方向应用额外的格式更改。此外,网页仍然只适合物理屏幕的宽度,而不是更宽(就像在移动 safari 中一样)。

以上是关于模式视图中的 UIWebview 在横向模式下以纵向显示的主要内容,如果未能解决你的问题,请参考以下文章

iPad 横向模式视图大小不正确

在 Windows 8.1 下以横向模式剪切打印的 wpf 视觉对象

在 Objective-C 中的 iOS 6 上强制横向方向

iPhone应用程序主视图不旋转但需要在调用UIWebView时旋转?

iOS:在横向模式下无法调整模式视图中的框架大小

将xib文件中的视图旋转为横向模式[重复]