web-dev-qa-db-ja.com

UIWebviewに空白を追加-iOS7およびiOS8でのUIWebView空白の削除

ローカル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が含まれています。

編集: 更新された画像

31
DevC

ViewDidLoadでself.automaticallyAdjustsScrollViewInsets = NO;を試してください。

iOS 7では、スクロールビュー用に64ピクセルが自動的に追加されます。 (ステータスバーとナビゲーションバー)

142
Yiding

この問題は、親ビューの最初のサブビューである場合のみUIWebViewに影響します。この問題を回避する1つの代替方法は、別の非表示の空のビューを最初のビューとして親ビューに追加することです。 Interface Builderでサイズがゼロのサブビューを追加し、Editor-> Arrange-> Send to Backメニューコマンドを使用します。

Interface Builderを使用していないが、代わりに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];
}
5
ThomasW

私は同じ問題を抱えていたので、いくつかのことを試しました:-)

これは私にとってはうまくいきましたが、より良い方法がある場合は修正してください。

-(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の後の数字は、私のアプリ専用です。それはあなたのために異なる場合があります。

3
jwknz

この問題を解決するには、WebViewに制約を設定し、それとビューの上部の間の上部のスペースを0に設定して、NavBarが空白とオーバーラップするようにします。

1
Iyashu5040

Jeff Kranenburgのメソッドの1つの代替方法は、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;
  }
}
0
ThomasW

私はすでにそれを手に入れました。

ここに私のロジックコード、アプリケーションがウェブサイトを開くとき、あなたはあなたのウェブビューのサイズを取得し、それを高さに設定する必要があります

ここに私のコード

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

私のコードと:)への私の答えがタブでもどんなデバイスでも機能することを願っています:)

0
Jude Bautista