UIWebView - 不会在轮换更改时调整内容大小?

时间:2012-03-06 00:27:53

标签: ios ipad uiwebview rotation

所以我有UIWebView显示静态html内容。

当我以纵向方式启动ViewController并切换到横向时,它会正确调整内容的大小。

但是,当我以横向方式启动页面并切换到纵向时,它不会调整我的内容大小,并且需要滚动才能查看所有内容。

这是一个错误吗?是否有强制调整UIWebView

内容大小的解决方案

5 个答案:

答案 0 :(得分:10)

您有两种选择:
将其添加到html文件的HEAD部分:

<meta name="viewport" content="width=device-width" />

或者在方向更改时致电[myWebView reload]

答案 1 :(得分:3)

我有类似的问题。我通过执行javascript代码来解决它,以生成在UIViewController完成轮换时更新页面方向的事件:

- (void) didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation
{
    [webView stringByEvaluatingJavaScriptFromString:@"var e = document.createEvent('Events'); "
                                                    @"e.initEvent('orientationchange', true, false);"
                                                    @"document.dispatchEvent(e); "];
}

答案 2 :(得分:3)

我尝试了上面的其他建议,但他们没有使用我加载的静态网页。我尝试将此行添加到我的网页标题中

<meta name="viewport" content="width=device-width" />

但是在改变横向和横向之间的方向后,它仍然没有调整页面宽度。在我的设备上的肖像。然后我将此行添加到func viewDidLoad()并且它完美地工作。我正在运行iOS 11.4

myWebView.autoresizingMask = UIViewAutoresizing.flexibleWidth

答案 3 :(得分:2)

这个问题很老,但这应该解决它:

myWebView.scalesPageToFit = YES;

或者,如果您正在使用Interface Builder,则可以勾选“属性检查器”下的“销售页面以适合”的复选框。

希望它有所帮助。

答案 4 :(得分:0)

我最终使用@Sergey Kuryanov的第二种方法,因为第一种方法对我不起作用。我正在使用UIWebView的loadHTMLString方法,因此您将在代码中看到它,但您可以使用在UIWebView中加载数据的任何方法替换它。

要做的第一件事就是订阅轮换通知。为此,我在这个问题中跟踪了@ clearwater82关于这个问题的答案:How to detect rotation for a programatically generated UIView
我重写了他对Swift 3的回答,你可以在同一页面找到它。

完成后,可以使用loadHTMLString轻松地在UIWebView中重新加载数据。我的方法是将UIWebView包装在自定义视图中,这样我也可以直接在自定义视图中处理HTML的一些格式。这使得添加&#34; reload-on-rotation&#34;非常简单。特征。这是我使用的代码,链接答案中的更多详细信息:

// Handle rotation
UIDevice.current.beginGeneratingDeviceOrientationNotifications()
NotificationCenter.default.addObserver(
    self,
    selector: #selector(self.orientationChanged(notification:)),
    name: NSNotification.Name.UIDeviceOrientationDidChange,
    object: nil
)

// Called when device orientation changes
func orientationChanged(notification: Notification) {
    // handle rotation here
    self.webView.loadHTMLString(self.htmlText, baseURL: nil)
}

deinit {
    NotificationCenter.default.removeObserver(self)
    UIDevice.current.endGeneratingDeviceOrientationNotifications()
}

我只想指出两件事:

  • self.htmlText是一个变量,其中包含我要加载的HTML文本,我添加到自定义视图中
  • 使用UIDevice.current.endGeneratingDeviceOrientationNotifications()适合我的情况,可能不适合你的

全部,干杯