Как сбросить масштаб UIWebView?Я уже использую scalePagesToFit = YES; - PullRequest
9 голосов
/ 23 июля 2010

Я искал ответ на этот вопрос на прошлой неделе.

У меня есть UIWebView внутри UIScrollView.Все отлично работает, но я хочу, чтобы содержимое UIWebView сбрасывало его масштаб при изменении ориентации.

В HTML внутри UIWebView я установил ширину области просмотра (с метатегом) равной«device-width», а затем на стороне Obj-C я установил scalePagesToFit = YES;

Я попытался сбросить масштабирование с помощью JavaScript;путем замены метатегов во время выполнения;перегрузки;доступ к UIScrollView внутри UIWebView;и т.д. ...

но безуспешно.

Кто-нибудь из вас, боги, знает обходной путь?

Единственное, о чем я могу подумать, - это заново создавать UIWebViews каждый раз, когда мыизмените ориентацию, но это заставит их мигать белым, пока рендеринг контента выглядит ужасно: (

Есть мысли?

Большое спасибо, Андре

Ответы [ 5 ]

8 голосов
/ 03 сентября 2010

Я просто догадываюсь здесь и не пытался, но AFAIK UIWebView имеет дочерний UIScrollView. Так что надо уметь:

for (UIScrollView *scroll in [myWebView subviews]) {
    // Make sure it really is a scroll view and reset the zoom scale.
    if ([scroll respondsToSelector:@selector(setZoomScale:)])
        [scroll setZoomScale:1.0];
}
3 голосов
/ 14 марта 2013

На iOS 5+ у вас есть доступ к scrollView.Просто сделайте:

[webView.scrollView setZoomScale: 1.0];

1 голос
/ 29 июня 2011

Обновление: При использовании

уменьшение не работало должным образом
[[[webView subviews] lastObject] setZoomScale:0.25];

Качество уменьшенных изображений на странице было ужасным. Выполнение:

[[[webView subviews] lastObject] setZoomScale:0.25 animated:YES];

Исправлено. Так что последняя строка - это та, которую вы можете использовать.

webView был разделен на UIWebView, который лежит в каком-то IB-файле. Я вообще не использовал видовой экран. Я считаю, что нужно выбирать, делая это со стороны Cocoa Touch или используя JS.

Я использовал:

webView.scalesPageToFit = YES;

Интересно, есть ли способ сброса весовPageToFit.

1 голос
/ 16 марта 2011

Если вы хотите сделать это программно, это единственный способ, которым я смог бы это сделать: (укажите ваши собственные размеры, если вы хотите, я пытался уменьшить масштаб после ввода в поле формы)

UIScrollView *sv = [[webViewView subviews] objectAtIndex:0];
[sv zoomToRect:CGRectMake(0, 0, sv.contentSize.width, sv.contentSize.height) animated:YES];
0 голосов
/ 29 апреля 2015

Адаптируясь из ответа Captnwalker1, я придумал это:

- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration {
    if(toInterfaceOrientation ==UIInterfaceOrientationPortrait||toInterfaceOrientation==UIInterfaceOrientationMaskPortraitUpsideDown)
    {
        currentScrollView = [[webView subviews] objectAtIndex:0];
        [currentScrollView zoomToRect:CGRectMake(0, 0, currentScrollView.contentSize.width, currentScrollView.contentSize.height) animated:NO];
    }
    else
    {
        currentScrollView = [[webView subviews] objectAtIndex:0];
        [currentScrollView zoomToRect:CGRectMake(0, 0, currentScrollView.contentSize.width, currentScrollView.contentSize.height) animated:NO];
    }
}

Загрузите изображение с веб-сайта, и при повороте изображение будет сброшено.

...