滚动视图内的iOS webView:根据设备方向更改高度

Posted

技术标签:

【中文标题】滚动视图内的iOS webView:根据设备方向更改高度【英文标题】:iOS webView inside scrollView : change height depending on the device orientation 【发布时间】:2017-07-18 10:00:51 【问题描述】:

我在scrollView 中有一个webView(scrollView > mainView > webView 和一个包含其他组件的 view2)。为了只有一个滚动条(scrollView 之一),我在完成加载时计算 webView 的高度,然后设置 mainView 的高度(它的高度等于 webView + view2 的高度)。我的应用程序支持纵向和横向模式。要检查旋转何时发生变化,我使用:

- (void) willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration 

在这个函数中,我调用另一个函数来重置我的webView 的内容(设置html 内容),以便

(void)webViewDidFinishLoad:(UIWebView *)webView.

可以召回:

- (void)webViewDidFinishLoad:(UIWebView *)webView 

    //set the main view height
    [self.loader stopAnimating];
    CGSize contentSize = webView.scrollView.contentSize;
    float scrollHeight = contentSize.height + 270;
    NSLog(@"webViewDidFinishLoad scrollHeight %f", scrollHeight);
    self.mainViewHeight.constant = scrollHeight;


我的问题:当应用程序一开始处于portrait 模式时,scrollView 的高度是正确的并且可以正常工作。之后,当我将旋转更改为landscape 模式时,高度也是正确的,但是当我将设备返回到portrait 时,scrollView 保持landscape 模式的高度,即使我设置了webViewDidFinishLoad 中的高度。当我在self.mainViewHeight.constant = scrollHeight; 中设置断点时,我发现当我从横向模式转到纵向模式时,contentSize 的高度并没有改变

【问题讨论】:

检查您的支持设备方向,也许您不支持例如颠倒,但旋转到它并等待一些东西 @gaRik 但我在其他屏幕上没有这个问题(在同一设备上的同一应用程序中) 【参考方案1】:
-(void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration 
   // change the frame for both portrait and landscape
   // check the orientation
   if(toInterfaceOrientation == UIDeviceOrientationPortrait)
    webView.frame = self.view.frame;
   else 
    //
   

【讨论】:

将此添加到 html 内容的头部 即使我的问题是高度而不是宽度?

以上是关于滚动视图内的iOS webView:根据设备方向更改高度的主要内容,如果未能解决你的问题,请参考以下文章

ScrollView 内的 Android WebView 仅滚动滚动视图

UIScrollView 内的 UIWebView 并滚动到 Web 视图中的选定字段

处理 ios 设备方向

ios:在webview上允许横向

滚动到视图时菜单的屏幕外文本出现延迟 - WebView 问题? (iOS)

堆栈小部件内的列表视图不起作用(滚动方向:Axis.vertical)