2013-09-22 3 views
31

Im загружает локальные html-файлы, так как iOS7 добавляет пустое место сверху в UIWebView. (Я не могу опубликовать изображение, поскольку у меня недостаточно точек.) 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 itДобавлен пробел в UIWebview - удаление пропусков UIWebView в iOS7 и iOS8

Я попытался настроить увеличение с помощью

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

Я также набор попытался удалить белый интервал:

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

еще не повезло. В обозревателе Chrome Chrome нет пробелов. Html-файлы - это файлы Google Swiffy, содержащие html и JSON.

редактировать: updated Image

+0

Извините, как-то я не вижу места там. Не могли бы вы загрузить простой скриншот? –

+0

@ ott - извините, у меня нет очков enuf rep! У html есть серый фон, html размещен внутри рамки, белый над серым - это пространство, это мгновенный снимок от симулятора iPhone. – DevC

+0

Но вы можете отправить полный скриншот на imagehack, как и на другое изображение (даже с симулятора с границами). –

ответ

142

Попробуйте self.automaticallyAdjustsScrollViewInsets = NO; в ViewDidLoad.

ios 7 автоматически добавляет 64px для просмотра прокрутки. (Строка состояния и нав бар)

+4

Приятный и простой и отлично работает! Спасибо – DevC

+2

Для получения дополнительной информации об этом см. Https://developer.apple.com/library/ios/documentation/userexperience/conceptual/TransitionGuide/AppearanceCustomization.html – RajV

+1

только для iOS 7, поэтому перед использованием его необходимо проверить, например, если ([self отвечаетToSelector: @selector (setAutomaticallyAdjustsScrollViewInsets :))) – Jingwei

3

У меня была такая же проблема, так что я попробовал несколько вещей :-)

Это работает для меня, но поправьте меня, пожалуйста, если есть лучший способ.

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

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

    } 
} 

Поэтому в основном вам нужно:

1) Добавить метод UIWebView делегата - webViewDidFinishLoad: 2) Тогда я настройки, если заявление, чтобы проверить, если полупрозрачный опция активна.

Последнее, что вам нужно сделать, конечно, только если вы предоставите пользователю возможность в своем приложении. Число после _webView.frame.origin.y только для моего приложения. Это может отличаться для вас.

+1

Спасибо, ive попробовал ваше решение, и оно тоже работало, однако @ Yiding быстрее и точно - вы должны попробовать сами :) – DevC

+0

сладкий спасибо за это :-) –

+0

Решение Yiding подходит, если ваш код управляет 'UIViewController', но в тех случаях, когда вы этого не делаете, как в библиотеке, это альтернатива. – ThomasW

0

Один из вариантов метода Джеффа Краненбург является подкласс и переопределить UIScrollViewDelegate метод в соответствии с UIWebView подклассов scrollViewDidScroll:. Это применимо только в том случае, если прокрутка отключена для вашего подкласса.

- (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

Эта проблема затрагивает только UIWebView, если это первая подтаблица из родительского вида. Один из альтернативных способов решения этой проблемы - добавить еще один невидимый пустой вид родительского представления в качестве первого представления. В Interface Builder добавьте subview с нулевым размером и используйте команду меню Editor-> Arrange-> Send to Back.

Если вы не используете Interface Builder, но вместо подклассов UIWebView, то это может быть сделано путем создания переменной в UIView экземпляра под названием scrollFixView и опрокинув следующие методы:

- (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

это экспликация tnks Apple для этого, я очень ценю эту функцию – primax79

1

Я решил эту проблему просто установив ограничение на WebView, установив верхнее пространство между ним и верхним окном View to 0, в результате чего NavBar будет перекрывать пробелы.

0

У меня уже есть.

здесь моя логика кода, когда приложение открыть веб-сайт вы должны получить размер вашего WebView затем установить его на высоту

вот мой код

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

Упование вы будете принимать мой код и мои ответ на :) работает на любых устройствах даже на вкладках тоже :)