我有一個UIWebView,它在設備旋轉時調整大小。當webview被調整大小時,頁面頂部的滾動位置保持不變,但由於內容的高度正在改變,所以最終會在旋轉結束的不同位置結束。在調整大小時保持UIWebView中的滾動位置
webview的內容是文本和圖像,這些文本和圖像沒有被縮放以適合。寬度越小,文字越多,使文字更高。
有沒有一種很好的方法來保持滾動位置?
我有一個UIWebView,它在設備旋轉時調整大小。當webview被調整大小時,頁面頂部的滾動位置保持不變,但由於內容的高度正在改變,所以最終會在旋轉結束的不同位置結束。在調整大小時保持UIWebView中的滾動位置
webview的內容是文本和圖像,這些文本和圖像沒有被縮放以適合。寬度越小,文字越多,使文字更高。
有沒有一種很好的方法來保持滾動位置?
解決此問題的一種解決方法是在旋轉後調整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;
}
看看我的解決方案:https://github.com/cxa/WebViewContentPositioner 。總之,我用document.caretRangeFromPoint(0, 0)
來捕獲Range
,並插入一個元素來跟蹤它的位置。調整大小後,使用捕獲的Range
信息來決定位置。
感謝Tobi。如果它只是視圖中的文本,那麼效果很好,但對於大多數內容來說並不足以解決問題。問題在於,如果內容包含文本和圖像,則圖像高度會隨着文本高度的增加而下降(至少在我的情況下)。所以它不像縮放它那麼簡單。變化的字體大小和其他元素也會導致像這樣的線性縮放。 –