2009-09-16 4 views
6

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

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

ответ

0

Я не уверен, есть ли чистый способ для этого. Я не пробовал, но вот идея:

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

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

+0

Как вы делаете часть «не передавайте прикосновение к uiwebview»? – dotnetcoder

+0

Это, вероятно, не самый простой способ достичь этого, особенно если вы ориентируетесь на iOS 5+ (UIWebView scrollView.contentInset выполняет это чисто). См. Ответ zerotool. Для iOS 4 вы можете перебирать подпрограммы UIWebview для надежного доступа к одному и тому же UIScrollView. – Prometheus

+0

Это очень старый q и – coneybeare

0

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

2

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

for (UIView *subview in theWebView.subviews) { 
    subview.clipsToBounds = NO; 
} 
9

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

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); 
+0

. Я рекомендую использовать это для iOS 5. В случае iOS 4 вы можете перебирать subviews, чтобы найти представление, где isKindOfClass: возвращает true для [UIScrollView class]. Затем просто настройте contentInset на этом представлении (переведите в UIScrollView). – Prometheus

+0

Это похоже на правильное решение для меня. – bio

0

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

В проекте, который нуждается в поддержке IOS 7 и более старых устройств, макрос как один нашел here:

#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.) 
3

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

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

Он работает в обе прошивкой 7 & 6, и я Бесполезный Не пытайтесь, но на iOS 5, вероятно, тоже

Смежные вопросы