2013-09-22 9 views
31

Wczytuję lokalne pliki HTML, ponieważ iOS7 w UIWebView jest dodana biała spacja. (Nie mogę opublikować obrazu, ponieważ nie mam wystarczającej liczby punktów.) image can be seen here- snap shot from iPhone simulator, uiwebview surrounded by black frame, the html content is grey, but there is white added above itDodano białe znaki w interfejsie użytkownika UIWebview - usuwanie białych znaków UIWebView w iOS7 i iOS8

próbowałem ustawić zoom przy użyciu

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

ja również ustawić próbował usunąć białe odstępy:

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

nadal nie ma szczęścia. W przeglądarce Chrome na pulpicie nie ma białych znaków. Pliki html to pliki Google Swiffy - zawierające html i JSON.

edit: updated Image

+0

Niestety, jakoś tam nie widzę miejsca. Czy możesz przesłać prosty zrzut ekranu? –

+0

@ ott - przepraszam, nie mam żadnych punktów rep! Html ma szare tło, html jest hostowany w ramce, biały nad szarym jest przestrzenią, jest to snap shot z symulatora iPhone'a – DevC

+0

Ale możesz też wysłać pełny zrzut ekranu do imagehacka, tak jak inny obraz (nawet z symulatora z granicami). –

Odpowiedz

142

Wypróbuj self.automaticallyAdjustsScrollViewInsets = NIE; w ViewDidLoad.

ios 7 dodaj 64 pikseli automatycznie do widoku przewijania. (Pasek stanu i pasek nawigacji)

+4

Ładne i proste i działało idealnie! Dzięki – DevC

+2

Szczegółowe informacje na ten temat można znaleźć na stronie https://developer.apple.com/library/ios/documentation/userexperience/conceptual/TransitionGuide/AppearanceCustomization.html – RajV

+1

Tylko na iOS 7, więc przed użyciem należy je sprawdzić, np. ([self responsesToSelector: @selector (setAutomaticallyAdjustsScrollViewInsets :)]) – Jingwei

3

miałem ten sam problem, więc próbowałem kilka rzeczy :-)

Ten pracował dla mnie, ale proszę mnie poprawić, jeśli istnieje lepszy sposób.

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

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

    } 
} 

Więc w zasadzie trzeba:

1) Dodaj metody UIWebView delegata - webViewDidFinishLoad: 2) Potem setup if aby sprawdzić, czy opcja jest aktywna półprzezroczysty.

To ostatnie, co musisz zrobić, oczywiście jeśli dasz użytkownikowi opcję w swojej aplikacji. Numer po _webView.frame.origin.y jest przeznaczony tylko dla mojej aplikacji. Może się różnić dla ciebie.

+1

Dzięki, ive wypróbował twoje rozwiązanie i zadziałało również, jednak @ Yiding's jest szybsze i na temat - powinieneś spróbować samemu :) – DevC

+0

Słodkie dzięki za to :-) –

+0

Rozwiązanie Yiding jest odpowiednie, jeśli twój kod kontroluje 'UIViewController', ale w przypadkach, gdy tego nie robisz, np. W bibliotece, jest to alternatywa. – ThomasW

0

Alternatywą dla metody Jeff Kranenburga jest do podklasy i zastąpić UIScrollViewDelegate metoda UIWebView podklasy scrollViewDidScroll:. Jest to odpowiednie tylko wtedy, gdy przewijanie jest wyłączone dla twojej podklasy.

- (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; 
    } 
} 
5

Ten problem dotyczy tylko UIWebView jeśli jest to pierwszy subview z widoku macierzystego. Jednym z alternatywnych sposobów obejścia tego problemu jest dodanie kolejnego niewidocznego pustego widoku do widoku rodzica jako pierwszego widoku. W Konstruktorze interfejsów dodaj podgląd podrzędny o rozmiarze zerowym i użyj polecenia Edytor-> Rozmieść-> Wyślij do tyłu.

Jeśli nie używasz interfejsu Builder, ale zamiast tego są instacji UIWebView, to może być wykonywane poprzez utworzenie zmiennej UIView instancji o nazwie scrollFixView i przesłanianie następujące metody:

- (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]; 
} 
+0

to jest eksplikacja tnks Apple za to, bardzo doceniam tę funkcję – primax79

1

I rozwiązać ten problem po prostu ustawiając ograniczenie w WebView, ustawiając górną przestrzeń między nim a View top na 0, powodując nałożenie NavBar na białe znaki.

0

Już to mam.

tutaj mój kod logiczny, Gdy aplikacja otworzy stronę trzeba uzyskać rozmiaru WebView następnie ustawić go na wysokości

tutaj mój kod

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

nadzieję wziąć mój kod i My odpowiedź na :) działa na każdym urządzeniu nawet zakładki :)