Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/110.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 调整大小时保持UIWebView中的滚动位置_Objective C_Ios - Fatal编程技术网

Objective c 调整大小时保持UIWebView中的滚动位置

Objective c 调整大小时保持UIWebView中的滚动位置,objective-c,ios,Objective C,Ios,我有一个UIWebView,它可以在设备旋转时调整大小。当调整webview的大小时,从页面顶部开始的滚动位置保持不变,但由于内容的高度发生了变化,因此在旋转结束时,您将处于不同的位置 webview的内容是文本和图像,未按比例缩放。宽度越小,文本越断,越高 有没有保持滚动位置的好方法?解决此问题的一种方法是在旋转后调整WebView滚动视图的contentOffset。由于文本中换行符的变化,页面的整体大小可能在旋转过程中发生变化 因此,要解决这个问题,您必须在“willRotateToInt

我有一个UIWebView,它可以在设备旋转时调整大小。当调整webview的大小时,从页面顶部开始的滚动位置保持不变,但由于内容的高度发生了变化,因此在旋转结束时,您将处于不同的位置

webview的内容是文本和图像,未按比例缩放。宽度越小,文本越断,越高


有没有保持滚动位置的好方法?

解决此问题的一种方法是在旋转后调整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;    
}