UIWebView меняет contentSize на iOS 7 после возвращения с фона

Проблема:

У меня есть UIWebView между моими UINavigationBar и UITabBar. На iOS 7, когда приложение входит в фоновый режим и возвращается снова, кажется, что свойство contentSize для UIWebView изменяется так, что над ним есть белый блок.

После мониторинга contentSize UIWebView, когда приложение переходит на передний план (я проверяю его, наблюдая за UIApplicationDidBecomeActiveNotification), он имеет 49 вычитаемых из него высот.

Снимок экрана (отредактированная конфиденциальная информация): Redacted version of the screenshot

Мои настройки:

Я использую UIWebView в моем UIViewController, который встроен в UITabBarViewController, встроенный в UINavigationController. Я использую раскадровки и имею "Настроить списки прокрутки", "Изменить размер изображения из NIB" и "Расширить края под заголовками Tob". На UIWebView я снял флажок "Scales Page To Fit". Я ничего не делаю в методах viewDidAppear или viewWillAppear. Я тестировал его на iOS 6, и проблема там не возникает. Кроме того, я не использую авто-макет.

Соответствующий код:

self.webView.scrollView.scrollEnabled = NO;
self.webView.scrollView.bounces = NO;
self.webView.scalesPageToFit = NO;

После мониторинга contentSize и кадра в viewDidAppear и appHasGoneInForeground:

Кадр идет от 320x455 до 320x455 contentSize идет от 320x504 до 320x455

Есть ли у кого-нибудь идея, чего я здесь не вижу и/или почему это происходит? Спасибо за ваше время!

Ответ 1

"Я использую UIWebView в моем UIViewController, который встроен в UITabBarViewController, встроенный в UINavigationController".

Это не поддерживается Apple. ссылка

... порядок сдерживания важен; только определенные договоренности действительны. Порядок сдерживания, от ребенка к родительскому, равен следующим образом:

Контроллеры содержимого и контроллеры контейнеров, которые имеют гибкие границы (такие как контроллер просмотра страниц)

Контроллер навигационного представления

Контроллер панели вкладок

Контроллер разделенных изображений

Сначала я попробую более простое и правильное расположение контейнеров и посмотрю, разрешит ли он проблему. Обратите внимание, что даже если вы решите эту проблему, если вы продолжаете использовать свою иерархию, вы все равно можете столкнуться с неожиданными и, возможно, непоследовательными проблемами пользовательского интерфейса.

Ответ 2

Попробуйте self.automaticallyAdjustsScrollViewInsets = NO в webView viewController.

автоматическиAdjustsScrollViewInsets является новым свойством в SDK iOS7, а значением по умолчанию является YES.It может автоматически настраивать viewController scrollView в iOS7.Вы можете получить дополнительную информацию с помощью поиска Google.

Я надеюсь, что это может вам помочь.

Ответ 3

Вы можете установитьContentSize или фрейм на:

-(void)viewDidLayoutSubviews

установить UIWebview в xib bottomomscle

Autorising

другой мудрый вы можете установить

self.edgesForExtendedLayout=UIRectEdgeNone;
self.extendedLayoutIncludesOpaqueBars=NO;
self.automaticallyAdjustsScrollViewInsets=NO;

Ответ 4

Это очень странное поведение. Вы используете AutoLayout? Если да, дважды проверьте, чтобы ваши ограничения гарантировали, что края webView всегда равны краям представления ViewController.

Если вы не используете AutoLayout, установите autooresizingMask таким образом, чтобы фиксированное и конечное пространство были исправлены:

webView.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth;

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

[view addObserver:self forKeyPath:@"contentSize" options:0 context:NULL];

Затем реализуем метод

- (void) observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context

и верните contentSize в соответствие с тем, что должно быть.

Ответ 5

Вы можете попробовать этот код (я знаю, что он небезопасен)

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

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

   }
 }

Число после _webView.frame.origin.y

Ответ 6

Привет, пожалуйста, посмотрите изображение, которое поможет вам.

Когда у вас есть UIWebview или табличное представление, пожалуйста, проверьте все направления автоматического изменения размера справа от UIwebview (вкладка Inspector Size) enter image description here

А также вы должны упомянуть Delta Y -20 и Delta Height to 20, что для iOS 7