Добавлен пробел в UIWebview — удаление пробела UIWebView в iOS7 и iOS8

Я загружаю локальные html-файлы, поскольку в iOS7 в UIWebView сверху добавлено пустое пространство. (Я не могу опубликовать изображение, так как у меня недостаточно баллов.) изображение можно увидеть здесь - снимок из симулятора iPhone, uiwebview окружен черной рамкой, html-контент серый, но сверху добавлен белый это

Я попытался настроить масштаб с помощью

[webView stringByEvaluatingJavaScriptFromString:@"document. body.style.zoom = 5.0;"];
webView.scalesPageToFit = NO;

Я также попытался удалить пробелы:

 NSString *padding = @"document.body.style.margin='0';document.body.style.padding = '0'";
[webView stringByEvaluatingJavaScriptFromString:padding];

все равно не повезло. В десктопном браузере хром нет пробелов. HTML-файлы — это файлы Google Swiffy, содержащие html и JSON.

редактировать: обновленное изображение


person DevC    schedule 22.09.2013    source источник
comment
Извините, что-то я не вижу там места. Не могли бы вы загрузить простой скриншот?   -  person ott--    schedule 22.09.2013
comment
@ott-- извините, у меня нет enuf очков репутации! HTML-код имеет серый фон, HTML-код размещен внутри фрейма, белый цвет над серым — это пространство, это снимок из симулятора iPhone.   -  person DevC    schedule 22.09.2013
comment
Но вы также можете отправить полный скриншот на imageshack, как и другое изображение (даже из симулятора с рамками).   -  person ott--    schedule 23.09.2013
comment
@ott-- обновленное изображение выше   -  person DevC    schedule 23.09.2013
comment
Вы когда-нибудь догадывались об этом? У меня точно такая же проблема. iOS6 была в порядке, но iOS7 добавляет над ней кучу пробелов. Я проверил, установив маржу, заполнение до нуля, цвет фона на красный, а затем цвет фона uiwebview на синий. Существует около 60 пикселей синего цвета. Похоже, что его высота такая же, как у навигационной панели, интересно, является ли это новой функцией полупрозрачной навигационной панели с uiwebview под ней.   -  person Kris    schedule 30.09.2013
comment
@Kris помогло приведенное ниже решение. Вы можете попробовать отключить автоматическое расположение, но это приведет ко всем другим проблемам. Попробуйте закрепить веб-просмотр на месте с помощью автомакета, это может помочь   -  person DevC    schedule 13.11.2013


Ответы (6)


Попробуйте self.automaticallyAdjustsScrollViewInsets = NO; в ViewDidLoad.

iOS 7 автоматически добавляет 64 пикселя для просмотра прокрутки. (строка состояния и панель навигации)

person Yiding    schedule 02.10.2013
comment
Подробнее об этом см. на странице developer.apple.com/library. /ios/documentation/userexperience/ - person RajV; 15.10.2013
comment
Только для iOS 7, поэтому его необходимо проверить перед использованием, например, if ([self responsesToSelector:@selector(setAutomaticallyAdjustsScrollViewInsets:)]) - person Jingwei; 18.09.2014
comment
Интересно, какова логика добавления этой панели в первую очередь. - person Duck; 26.09.2014
comment
отлично работает, но в Swift это должно быть логическое ложное значение: self.automaticallyAdjustsScrollViewInsets = false - person bkurzius; 23.01.2016

Эта проблема влияет только на UIWebView, если это первое подпредставление родительского представления. Один из альтернативных способов обойти эту проблему — добавить еще одно невидимое пустое представление к родительскому представлению в качестве первого представления. В Интерфейсном Разработчике добавьте подпредставление нулевого размера и используйте команду меню Editor->Arrange->Send to Back.

Если вы не используете Interface Builder, а создаете подкласс UIWebView, то это можно сделать, создав переменную экземпляра UIView с именем scrollFixView и переопределив следующие методы:

- (void)didMoveToSuperview
{
  [super didMoveToSuperview];

  if ([self superview].subviews.firstObject == self) {
    _scrollFixView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 0, 0)];
    _scrollFixView.hidden = YES;
    [[self superview] insertSubview:_scrollFixView belowSubview:self];
  }
}

- (void)removeFromSuperview
{
  if (_scrollFixView) {
    [_scrollFixView removeFromSuperview];
    _scrollFixView = nil;
  }

  [super removeFromSuperview];
}
person ThomasW    schedule 16.04.2014
comment
это объяснение спасибо Apple за это, я очень ценю эту функцию - person primax79; 29.09.2014

У меня была такая же проблема, поэтому я попробовал несколько вещей :-)

Это сработало для меня, но поправьте меня, пожалуйста, если есть лучший способ.

-(void)webViewDidFinishLoad:(UIWebView *)webView
 {
   if(self.navigationController.navigationBar.translucent == YES)
   {

    _webView.scrollView.contentOffset = CGPointMake(_webView.frame.origin.x, _webView.frame.origin.y - 54);

   }
 }

Итак, в основном вам нужно:

1) Добавьте метод делегата UIWebView - webViewDidFinishLoad: 2) Затем я настраиваю оператор if, чтобы проверить, активна ли полупрозрачная опция.

Последнее вам нужно сделать только в том случае, если вы предоставите пользователю возможность в своем приложении. Номер после _webView.frame.origin.y предназначен только для моего приложения. Это может отличаться для вас.

person jwknz    schedule 01.10.2013
comment
Спасибо, я попробовал ваше решение, и оно тоже сработало, однако @Yiding работает быстрее и точнее - вы должны попробовать сами :) - person DevC; 03.10.2013
comment
Решение Yiding подходит, если ваш код управляет UIViewController, но в случаях, когда вы этого не делаете, например, с библиотекой, это альтернатива. - person ThomasW; 14.04.2014
comment
Что такое 54? - person Daniel Springer; 19.05.2020

Я решил эту проблему, просто установив ограничение на WebView, установив верхнее пространство между ним и View top равным 0, в результате чего NavBar перекрывает пробелы.

person Iyashu5040    schedule 10.07.2014

Одной из альтернатив методу Джеффа Краненбурга является создание подкласса и переопределение метода UIScrollViewDelegate scrollViewDidScroll: UIWebView подклассов. Это уместно только в том случае, если для вашего подкласса отключена прокрутка.

- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
  if ([[self superclass] instancesRespondToSelector:_cmd]) {
    [super scrollViewDidScroll:scrollView];
  }

  [self fixUpScrollViewContentOffset];
}

- (void)fixUpScrollViewContentOffset
{
  if (!CGPointEqualToPoint(self.scrollView.contentOffset, CGPointZero)) {
    self.scrollView.contentOffset = CGPointZero;
  }
}
person ThomasW    schedule 16.04.2014

Я уже поняла .

вот мой логический код. Когда приложение открывает веб-сайт, вы должны получить размер своего веб-просмотра, а затем установить его по высоте

вот мой код

     ViewGroup.MarginLayoutParams p = (ViewGroup.MarginLayoutParams) webpage.getLayoutParams();
            p.height = webpage.getHeight();
// check if how long you need to set your height for webpage then set it :)
            Log.e(" webpage.getHeight()", String.valueOf(webpage.getHeight()));
            webpage.setLayoutParams(p);

Надеюсь, вы примете мой код и мой ответ :) работает на любых устройствах, даже на вкладках :)

person Jude Bautista    schedule 11.12.2015