2012-01-26 74 views
4

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

webview的内容是文本和图像,这些文本和图像没有被缩放以适合。宽度越小,文字越多,使文字更高。

有没有一种很好的方法来保持滚动位置?

回答

0

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

所以要解决这个问题,您必须将webviews内容的旧尺寸保存在“willRotateToInterfaceOrientation”方法中,然后计算“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;  
} 
+0

感谢Tobi。如果它只是视图中的文本,那么效果很好,但对于大多数内容来说并不足以解决问题。问题在于,如果内容包含文本和图像,则图像高度会随着文本高度的增加而下降(至少在我的情况下)。所以它不像缩放它那么简单。变化的字体大小和其他元素也会导致像这样的线性缩放。 –

0

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

相关问题