UIWebView под прозрачной UINavigationBar - PullRequest
6 голосов
/ 16 сентября 2009

У меня есть UIWebView, который я хочу поместить в полупрозрачную панель UINavigationBar. Обычно, когда я помещаю UIScrollView в полупрозрачный UINavigationBar, я устанавливаю его contentOffset таким образом, чтобы весь контент был первоначально перемещен после полосы, чтобы ее можно было увидеть; после этого пользователь может прокручивать текст, и он будет перекрывать панель.

Проблема в том, что UIWebView не является надлежащим подклассом UIScrollView; таким образом, я не могу использовать setContentOffset. У кого-нибудь есть какие-либо советы или подсказки, как заставить UIWebView хорошо выглядеть с полупрозрачной панелью навигации? Спасибо.

Ответы [ 6 ]

9 голосов
/ 13 ноября 2011

Начиная с iOS 5, вы можете использовать свойство scrollView UIWebView и установить contentInset для настройки положения.

CGFloat top = 0.0;

if( self.navigationController != nil && self.navigationController.navigationBar.translucent ) {
    top = self.navigationController.navigationBar.bounds.size.height;
}

UIWebView* wv = ...

wv.scrollView.contentInset = UIEdgeInsetsMake(top, 0.0, 0.0, 0.0);
3 голосов
/ 30 апреля 2014

Самый простой способ - установить:

webView.clipsToBounds = NO;
webView.scrollView.clipsToBounds = NO;

Это работает на iOS 7 & 6, и я не пробовал, но на iOS 5, вероятно, тоже

2 голосов
/ 25 июня 2010

Я достиг этого, настроив подпредставления UIWebView, чтобы они не обрезались до границ, тогда я мог бы поместить панель инструментов поверх нее и получить желаемый эффект:

for (UIView *subview in theWebView.subviews) {
    subview.clipsToBounds = NO;
}
0 голосов
/ 25 октября 2013

С появлением iOS 7 высота смещения теперь должна включать высоту верхней области состояния. В противном случае устройства iOS7 будут иметь 20 пикселей веб-просмотра, все еще скрытые под панелью навигации.

В проекте, который должен поддерживать iOS 7 и более старые устройства, макрос, подобный найденному здесь:

#define SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(v)  ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedAscending)

Может быть очень полезным. Перечисленная выше модифицированная версия полезного кода zerotool теперь может выглядеть примерно так:

if (self.navigationController != nil && self.navigationController.navigationBar.translucent) {
    top = self.navigationController.navigationBar.bounds.size.height;
    if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"7.0")) {
        top += [[UIScreen mainScreen] applicationFrame].origin.y;
    }
}
// (etc.)
0 голосов
/ 16 сентября 2009

Еще один способ сделать это - вставить div в HTML-код, который вы отображаете, чтобы он располагался вверху страницы. убедитесь, что вы правильно установили масштаб и для начала установите происхождение uiwebviews (0, -x).

0 голосов
/ 16 сентября 2009

Я не уверен, существует ли для этого метод clean . Я не пробовал, но вот идея:

  1. Нарисуйте uiwebview в начале координат 0,0
  2. перехватывать все касания экрана
  3. если вы обнаружите, что пользователь перетаскивает (прокручивает веб-просмотр), не передавайте касание
  4. Вместо этого переместите веб-просмотр вверх на x пикселей, чтобы его источник был (0, -x). Затем измените высоту, чтобы добавить х пикселей
  5. Вам нужно будет сохранить какое-то состояние, чтобы вы знали, когда прекратить изменять размер веб-просмотра и начать передавать штрихи, чтобы веб-просмотр прокручивался.

Возвращение обратно - то же самое, только вы делаете это при перетаскивании вниз (прокручивая веб-просмотр).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...