在UIWebView中居中PDF

时间:2013-01-13 19:36:09

标签: ios pdf uiwebview

以下是我的PDF在UIWebView中加载时的样子:(我将UIWebView的背景设置为蓝色渐变,这样你就可以看到我的意思了。)

Hi StackOverflow!

我想将其置于中心位置,以使下边距与上边距相同。我如何使用PDF(非本地)?

2 个答案:

答案 0 :(得分:2)

- (void)webViewDidFinishLoad:(UIWebView *)webView
{
    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 10 * NSEC_PER_MSEC), dispatch_get_main_queue(), ^{
        CGFloat topInset = floor(([[self webView] frame].size.height - [[[self webView] scrollView] contentSize].height) / 2);
        [[[self webView] scrollView] setContentInset:UIEdgeInsetsMake(topInset, 0, 0, 0)];
        [[[self webView] scrollView] setContentOffset:CGPointMake(0, -topInset) animated:NO];
    });
}

这使用UIWebView的内部UIScrollView。内容大小从滚动视图中获取,并从整个Web视图中获取。这给了'额外'空间。一半,并将其用作顶部插图,并将其置于中心位置。您需要首先使用setContentOffset:自己将视图滚动到正确的位置,因为这似乎是在我们设置插入之前在内部设置的。从那时起,一切都应该有效。

不幸的是,dispatch_after是iOS 8中的一项要求。contentSize如果在webViewDidFinishLoad:之后过早提取,则{0}将为0。

答案 1 :(得分:1)

我没有使用iOS的经验,但有多种方法可以在HTML中垂直居中内容。

一个是wrap your content in a table

<style>
  html, body, table {
    height: 100%;
  }
  table {
    width: 100%;
  }
  td {
    text-align: center;
    vertical-align: middle;
  }
</style>
<table>
  <tr>
    <td>
      <object .../>
    </td>
  </tr>
</table>

另一个是apply table-like styles to elements that are already wrapping your content

<style>
  html, body {
    height: 100%;
  }
  body {
    display: table;
    width: 100%;
  }
  center {
    display: table-cell;
    vertical-align: middle;
  }
</style>
<center>
  <object .../>
</center>

没有标记的解决方案是use CSS flexible boxes

<style>
  html, body {
    height: 100%;
  }
  body {
    display: -webkit-box;
    -webkit-box-pack: center;
    -webkit-box-align: center;
  }
</style>
<object .../>