【问题标题】:Maintain scroll position in UIWebView when resizing调整大小时保持 UIWebView 中的滚动位置
【发布时间】:2012-01-26 01:49:15
【问题描述】:

我有一个 UIWebView,它会在设备旋转时调整大小。当 webview 被调整大小时,页面顶部的滚动位置保持不变,但由于内容的高度在变化,所以在旋转结束时您最终会处于不同的位置。

webview 的内容是没有被缩放以适应的文本和图像。宽度越小,文字越多,文字越长。

有没有保持滚动位置的好方法?

【问题讨论】:

    标签: objective-c ios


    【解决方案1】:

    解决此问题的一种方法是在旋转后调整 webview 的滚动视图的 contentOffset。由于文本中换行符的变化,页面的整体大小可能会在旋转期间发生变化。

    所以要解决这个问题,你必须在“willRotateToInterfaceOrientation”方法中保存webviews内容的旧尺寸,然后在“didRotateFromInterfaceOrientation”方法中计算相对变化并调整scrollviews contentOffset。 (这“几乎”解决了问题 - 我说几乎是因为由于换行符的变化,您最终可能会偏离您想要的位置一两行。)

    - (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
    {
        oldSize = self.webView.scrollView.contentSize;
    }
    
    - (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation
    {
        CGSize newSize = self.webView.scrollView.contentSize;
        float xFactor = newSize.width / oldSize.width;
        float yFactor = newSize.height / oldSize.height;
    
        CGPoint newOffset = webView.scrollView.contentOffset;
        newOffset.x *= xFactor;
        newOffset.y *= yFactor;
    
        webView.scrollView.contentOffset = newOffset;    
    }
    

    【讨论】:

    • 谢谢托比。如果它只是视图中的文本,则效果很好,但与大多数内容的近似值不足以解决问题。这样做的问题是,如果内容同时包含文本和图像,则图像的高度会降低(至少在我的情况下),而文本的高度会增加。所以它不像缩放它那么简单。改变字体大小和其他元素也会导致像这样的中断线性缩放。
    【解决方案2】:

    看看我的解决方案:https://github.com/cxa/WebViewContentPositioner。简而言之,我使用document.caretRangeFromPoint(0, 0) 来捕获Range,并插入一个元素来跟踪它的位置。调整大小后,使用捕获的Range 信息来决定位置。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-23
      • 1970-01-01
      相关资源
      最近更新 更多