2012-01-26 76 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信息來決定位置。

相關問題