Objective c 调整大小时保持UIWebView中的滚动位置
我有一个UIWebView,它可以在设备旋转时调整大小。当调整webview的大小时,从页面顶部开始的滚动位置保持不变,但由于内容的高度发生了变化,因此在旋转结束时,您将处于不同的位置 webview的内容是文本和图像,未按比例缩放。宽度越小,文本越断,越高Objective c 调整大小时保持UIWebView中的滚动位置,objective-c,ios,Objective C,Ios,我有一个UIWebView,它可以在设备旋转时调整大小。当调整webview的大小时,从页面顶部开始的滚动位置保持不变,但由于内容的高度发生了变化,因此在旋转结束时,您将处于不同的位置 webview的内容是文本和图像,未按比例缩放。宽度越小,文本越断,越高 有没有保持滚动位置的好方法?解决此问题的一种方法是在旋转后调整WebView滚动视图的contentOffset。由于文本中换行符的变化,页面的整体大小可能在旋转过程中发生变化 因此,要解决这个问题,您必须在“willRotateToInt
有没有保持滚动位置的好方法?解决此问题的一种方法是在旋转后调整WebView滚动视图的contentOffset。由于文本中换行符的变化,页面的整体大小可能在旋转过程中发生变化 因此,要解决这个问题,您必须在“willRotateToInterfaceOrientation”方法中保存webviews内容的旧大小,然后在“didRotateFromInterfaceOrientation”方法中计算相对更改,并调整scrollviews内容偏移量。(这“几乎”解决了问题——我说几乎是因为换行符的变化,你可能会偏离你想要的位置一到两行。)
看看我的解决方案:。简而言之,我使用
document.caretRangeFromPoint(0,0)
捕获范围,并插入一个元素来跟踪其位置。调整大小后,使用捕获的范围
信息确定位置。感谢Tobi。如果它只是视图中的文本,那么效果会很好,但对于大多数内容来说,这还不够接近解决问题。问题是,如果内容同时包含文本和图像,图像的高度会降低(至少在我的情况下),而文本的高度会增加。所以这并不像缩放它那么简单。改变类型大小和其他元素也会导致像这样的中断线性缩放。
- (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;
}