我有一个UIWebView,可以在旋转设备时调整大小。调整webview的大小时,页面顶部的滚动位置保持不变,但由于内容的高度发生变化,因此在旋转结束时最终会出现在不同的位置。
webview的内容是未缩放以适合的文本和图像。在较小的宽度处,文本会断开,使其更高。
是否有一种保持滚动位置的好方法?
答案 0 :(得分:0)
解决此问题的一种方法是在轮换后调整webviews的scrollview的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;
}
答案 1 :(得分:0)
看看我的解决方案:https://github.com/cxa/WebViewContentPositioner。简而言之,我使用document.caretRangeFromPoint(0, 0)
来捕获Range
,并插入一个元素来跟踪其位置。调整大小后,使用捕获的Range
信息来确定位置。