31

我正在加载本地 html 文件,因为 iOS7 在 UIWebView 顶部添加了空白。(我无法发布图像,因为我没有足够的点。) 可以在这里看到图像 - 从 iPhone 模拟器快照,uiwebview 被黑色包围框架,html内容是灰色的,但上面加了白色

我尝试使用调整缩放

[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。

编辑:更新的图像

4

6 回答 6

142

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

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

于 2013-10-02T20:31:14.207 回答
5

此问题仅影响UIWebView它是否是父视图的第一个子视图。解决此问题的另一种方法是将另一个不可见的空视图添加到父视图作为第一个视图。在 Interface Builder 中添加一个零大小的子视图并使用 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];
}
于 2014-04-16T01:51:09.143 回答
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) 然后我设置一个 if 语句来检查半透明选项是否处于活动状态。

如果您在应用程序中为用户提供选项,您当然只需要做最后一个。后面的数字_webView.frame.origin.y仅适用于我的应用程序。对你来说可能会有所不同。

于 2013-10-01T09:13:30.910 回答
1

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

于 2014-07-10T09:14:47.730 回答
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;
  }
}
于 2014-04-16T01:25:40.220 回答
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);

希望你能接受我的代码和我的回答:) 适用于任何设备甚至标签:)

于 2015-12-11T04:15:51.503 回答