2009-09-16 14 views
6

Mam UIWebView, który chcę umieścić pod moim przezroczystym UINavigationBar. Zwykle, kiedy umieszczam UIScrollView pod przezroczystym UINavigationBar, ustawię jego contentOffset tak, że cała zawartość będzie początkowo popchnięta po pasku, aby było widoczne; następnie użytkownik może przewijać tekst i będzie podążał za prętem.UIWebView under transparent UINavigationBar

Problem w tym, że UIWebView wydaje się nie być właściwą podklasą UIScrollView; w związku z tym nie można użyć setContentOffset. Czy ktoś ma jakieś porady lub wskazówki dotyczące uzyskania dobrego wyglądu UIWebView za pomocą półprzezroczystego paska nawigacji? Dzięki.

Odpowiedz

0

Nie jestem pewien, czy jest to metoda clean. Nie próbowałem, ale tutaj jest pomysł:

  1. narysować UIWebView w miejscu pochodzenia 0,0
  2. przechwytujący wszystko ekran dotyka
  3. jeśli wykryje użytkownik przeciągając w górę (przewijanie w górę webview) nie przesyłaj dotyku na
  4. Zamiast tego przenieś widok w górę o piksele, tak aby jego początkiem było (0, -x). Następnie zmień wysokość, aby dodać x pikseli.
  5. Będziesz musiał zachować pewien stan, aby wiedzieć, kiedy przerwać zmianę rozmiaru widoku i zacząć przekazywać dotknięcia, aby przeglądać stronę internetową.

Odtworzenie jest takie samo, jak w przypadku przeciągania w dół (przewijanie w dół widoku).

+0

Jak zrobić część "nie przekazać dotyku do uiwebview"? – dotnetcoder

+0

Prawdopodobnie nie jest to najłatwiejszy sposób, aby osiągnąć ten cel, zwłaszcza jeśli kierujesz na system iOS 5+ (UIWebView scrollView.contentInset dokonuje tego czysto). Zobacz odpowiedź przez zerotool. W przypadku iOS 4 możesz powtórzyć subskrypcje UIWebview, aby uzyskać niezawodny dostęp do tego samego interfejsu UIScrollView. – Prometheus

+0

To jest bardzo stary q i – coneybeare

0

Innym sposobem, aby to zrobić, jest wstawienie elementu div do kodu HTML, który jest renderowany w taki sposób, aby był umieszczony na górze strony. upewnij się, że ustawiłeś swój zoom poprawnie i ustaw początek uiwebviews na (0, -x) na początek.

2

I to osiągnąć poprzez ustawienie subviews UIWebView nie clip do granic, to mogę umieścić pasek na wierzchu i uzyskać pożądany efekt:

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

Jak z iOS 5 można użyć Scrollview właściwość UIWebView i ustawić contentInset w celu dostosowania pozycji.

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

Polecam, używając tego dla iOS 5. W przypadku iOS 4, możesz iterować subviews, aby znaleźć widok, gdzie isKindOfClass: zwraca true dla [klasy UIScrollView]. Następnie wystarczy ustawić contentInset w tym widoku (rzutowany na UIScrollView). – Prometheus

+0

To wygląda na właściwe rozwiązanie dla mnie. – bio

0

Wraz z nadejściem iOS 7, wysokość przesunięcia musiałaby teraz obejmować wysokość górnego obszaru stanu. W przeciwnym razie urządzenia z iOS7 będą miały 20 pikseli podglądu strony internetowej ukrytego pod paskiem nawigacji.

W projekcie, który musi wspierać iOS 7 i starszych urządzeń, makro jak ten znalazł here:

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

może być bardzo przydatna. zmodyfikowana wersja zerotool pomocne kod wymieniony powyżej może teraz wyglądać następująco:

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

Najprostszym sposobem jest ustawienie:

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

pracować na Bouth iOS 7 & 6, a ja nie zrobił nie próbuj, ale na iOS 5 prawdopodobnie też

Powiązane problemy