【发布时间】:2012-01-26 01:49:15
【问题描述】:
我有一个 UIWebView,它会在设备旋转时调整大小。当 webview 被调整大小时,页面顶部的滚动位置保持不变,但由于内容的高度在变化,所以在旋转结束时您最终会处于不同的位置。
webview 的内容是没有被缩放以适应的文本和图像。宽度越小,文字越多,文字越长。
有没有保持滚动位置的好方法?
【问题讨论】:
标签: objective-c ios
我有一个 UIWebView,它会在设备旋转时调整大小。当 webview 被调整大小时,页面顶部的滚动位置保持不变,但由于内容的高度在变化,所以在旋转结束时您最终会处于不同的位置。
webview 的内容是没有被缩放以适应的文本和图像。宽度越小,文字越多,文字越长。
有没有保持滚动位置的好方法?
【问题讨论】:
标签: objective-c ios
解决此问题的一种方法是在旋转后调整 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;
}
【讨论】:
看看我的解决方案:https://github.com/cxa/WebViewContentPositioner。简而言之,我使用document.caretRangeFromPoint(0, 0) 来捕获Range,并插入一个元素来跟踪它的位置。调整大小后,使用捕获的Range 信息来决定位置。
【讨论】: