UIWebView底部没有额外高度的contentInset

14

我正在创建一个视图控制器,使用一个 WebView,并将其滑动到导航栏和状态栏的后面。为了实现这个目标,我将 webView.scrollView.contentInset 属性设置为具有上边缘偏移量为 64

然而,这并没有减少 WebView 想要占用的区域,所以如果页面不足一屏幕高度,它底部会留下 64 像素的白色空间来滚动。WebView 在一个垂直的 UIPageViewController 中,这会打乱翻页的效果。是否有办法去除这个额外的空间?


你想让网页视图内容在导航栏和状态栏后面显示吗?还是希望导航栏随着网页视图滚动,而状态栏在其后面显示? - Maximilian Litteral
当您滚动 Web 视图时,我希望它可以滑动到半透明导航栏和状态栏的后面。(实际上,我是在 iOS 7 上进行此操作的,因此这是其中一个新奇的模糊导航栏,但 UIWebView 滚动的方式似乎没有改变。)我以前已经实现了滚动行为,但这不是我在此应用程序中寻找的内容。 - Becca Royal-Gordon
哦,我想我知道你想要什么了,它不是contentInset,因为那会移动Web视图的内容。如果你想让Web视图显示在导航栏和其他东西的后面,你需要将clipsToBounds设置为NO。 - Maximilian Litteral
你能否将其简化为一个简单的示例项目,以展示问题?这将使修复变得更加容易。 - Tammo Freese
5个回答

8

你尝试过像调整Webview的ScrollView内容插图这样的东西吗?示例:

    webView.scrollView.contentInset = UIEdgeInsetsMake(0, 0,64, 0)

6

请查看我的问题评论,了解我正在做的事情的更多细节。我假设如果页面不足一屏高,contentSize 应该只会发生变化,对吗?我该如何确定这一点? - Becca Royal-Gordon
1
当您的 WebView 加载时,contentSize 可能会告诉您内容的高度。听起来更像是您需要设置 contentInset.bottom = 64。 - Chris Truman

1

更改 clipsToBounds 属性。

webView.clipsToBounds = NO;

这将使其内容在其框架外可见,因此请像正常设置一样将其框架放在导航栏下方。导航栏将是半透明的,您将在其下方看到其内容。

不幸的是,在这种情况下,这并不起作用,因为它们在UIPageViewController中。一个控制器中的Web视图溢出其边缘,并最终与其上下的控制器重叠,显然干扰了页面控制器的手势识别器。 - Becca Royal-Gordon
它不应该这样做,它不允许在你现在可以看到的那些地方触摸,只是展示它。我从未尝试过页面控制器,所以我不知道,我认为那会起作用。 - Maximilian Litteral
另一种方法可能是将视图控制器设置为想要全屏布局...然后从那里开始。UIViewController 在其管理的一个或多个视图上设置了 clipsToBounds=YES ...我不记得是否设置viewController.wantsFullScreenLayout=YES 可以解决这个问题。 - nielsbot

0

别忘了为网页视图禁用自动布局!


-1
我已经通过禁用短页面上的滚动来解决了这个问题。基本上,我使用 -stringByEvaluatingJavaScriptFromString: 在页面内运行一些 JavaScript,从 document.body 开始向下遍历并计算最底部元素的位置。(document.body 本身至少与视口一样大,因此我无法查看其大小。)然后,在 Objective-C 中,我将其与 Web 视图的高度(减去插入)进行比较,如果小于它,则禁用滚动。这不是完美的解决方案,但它可以解决最严重的症状。
如果有人能想出比这更好的解决方案,我很乐意听听!无论如何,我不能把赏金颁给自己,所以会有人得到它。

说实话,我认为这不应该被标记为正确答案,因为有更好的选择,比如 Chris Truman 提供的那个。用 JavaScript 来检查最底部元素的位置是不好的。 - Uzaak

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接