2013-09-22 47 views
31

由于iOS7在UIWebView中添加了空白空间,所以我加载了本地html文件(因为我没有足够的分数,所以我无法发布图像) 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中添加空白 - 在iOS7和iOS8中删除UIWebView空白

我试图调整使用变焦

[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浏览器中没有空白。 html文件是Google Swiffy文件 - 包含html和JSON。

编辑:updated Image

+0

对不起,我不在那里看到空间。你能上传一个简单的截图吗? –

+0

@ ott--对不起,我没有enuf代表点! HTML有灰色的背景,HTML被托管在一个框架内,灰色以上的白色是空间,它是iPhone模拟器的快照 – DevC

+0

但是,您可以将完整的屏幕截图发送到imageshack,就像其他图像一样(甚至从具有边界的模拟器)。 –

回答

142

尝试self.automaticallyAdjustsScrollViewInsets = NO;在ViewDidLoad中的

ios 7自动为滚动视图添加64像素。 (状态栏和导航栏)

+4

不错,简单,完美!谢谢 – DevC

+2

有关详细信息,请参阅https://developer.apple.com/library/ios/documentation/userexperience/conceptual/TransitionGuide/AppearanceCustomization.html – RajV

+1

仅适用于iOS 7,因此必须在使用它之前进行检查,如if( [selfrespondsToSelector:@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

谢谢,我尝试了你的解决方案,它的工作也是,但@ Yiding的更快,重点 - 你应该自己试试:) – DevC

+0

甜蜜的感谢,因为:-) –

+0

如果你的代码控制'UIViewController',Yiding的解决方案是适当的,但是在你不喜欢库的情况下,这是另一种选择。 – ThomasW

0

Jeff Kranenburg的方法的一种替代方法是子类和覆盖UIWebView子类'UIScrollViewDelegate方法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中添加一个零大小的子视图并使用Editor-> Arrange-> Send to Back菜单命令。

如果你不使用界面生成器,而是在继承的UIWebView,那么就可以通过创建一个名为scrollFixView一个UIView实例变量并覆盖下列方法进行:

- (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苹果为此,我非常感谢这一功能 – primax79

1

我解决了这个问题通过简单地在WebView上设置约束,将其与View顶部之间的顶部空间设置为0,导致NavBar重叠空白。

0

我已经知道了。

我在这里的逻辑代码,当应用程序打开该网站,你必须让你的网页流量的大小,然后将其放置在高度

这里我的代码

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

希望你们对我的代码和我回答:)在任何设备上工作,甚至标签也:)