所以我有UIWebView
显示静态html内容。
当我以纵向方式启动ViewController
并切换到横向时,它会正确调整内容的大小。
但是,当我以横向方式启动页面并切换到纵向时,它不会调整我的内容大小,并且需要滚动才能查看所有内容。
这是一个错误吗?是否有强制调整UIWebView
答案 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()
适合我的情况,可能不适合你的全部,干杯