从后台返回后,UIWebView在iOS 7上更改contentSize

时间:2013-11-28 10:00:46

标签: ios iphone objective-c uiwebview ios7

问题:

我的UIWebViewUINavigationBar之间有一个UITabBar。在iOS 7上,当应用程序进入后台并再次返回时,似乎contentSize的{​​{1}}属性发生了变化,因此其上方有一个白色块。

在监视UIWebView的{​​{1}}之后,当应用程序进入前景时(我通过观察contentSize来检查它),它从它的高度减去了49。

屏幕截图(编辑敏感信息): Redacted version of the screenshot

我的设置:

我在我的UIWebView中使用UIApplicationDidBecomeActiveNotificationUIWebView嵌入在UIViewController中嵌入UITabBarViewController。我正在使用故事板并具有“调整滚动视图插入”,“从NIB调整视图大小”和“在条形图下扩展边缘”。在UINavigationController我没有选中“Scales Page To Fit”。我在UIWebViewviewDidAppear方法中没有做任何事情。我在iOS 6上测试过它,问题不会发生在那里。另外,我没有使用自动布局。

相关代码:

viewWillAppear

监控contentSize& self.webView.scrollView.scrollEnabled = NO; self.webView.scrollView.bounces = NO; self.webView.scalesPageToFit = NO; &中的框架viewDidAppear

帧从320x455变为320x455 contentSize从320x504到320x455

有没有人知道我在这里缺少什么和/或为什么会这样?谢谢你的时间!

6 个答案:

答案 0 :(得分:20)

请在webView的viewController中尝试self.automaticallyAdjustsScrollViewInsets = NO

automaAdjustsScrollViewInsets是iOS7 SDK中的新属性,默认值为YES。它可以在iOS7中自动调整viewController的scrollView。您可以通过谷歌搜索获得更多信息。

我希望它可以帮到你。

答案 1 :(得分:6)

您可以在以下位置设置内容大小或框架:

-(void)viewDidLayoutSubviews

在xib bottomscle中设置UIWebview

Autorising

另外,你可以设置

self.edgesForExtendedLayout=UIRectEdgeNone;
self.extendedLayoutIncludesOpaqueBars=NO;
self.automaticallyAdjustsScrollViewInsets=NO;

答案 2 :(得分:4)

这是非常奇怪的行为。你在使用AutoLayout吗?如果是,请仔细检查您的约束是否确保webView的边缘始终等于ViewController的视图边缘。

如果您没有使用AutoLayout,请设置autoresizingMask,以便修复前导和尾随空格:

webView.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth;

如果这不起作用,您可以使用KVO添加黑客/解决方法(请仅将此作为最后手段使用,因为这不是一个好习惯):

[view addObserver:self forKeyPath:@"contentSize" options:0 context:NULL];

然后实现方法

- (void) observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context

并将contentSize设置回原来的值。

答案 3 :(得分:3)

“我在UIViewController中使用了一个UIWebView,它嵌入在嵌入UINavigationController的UITabBarViewController中。”

Apple不支持此功能。 link

  

......遏制的顺序很重要;只是某些安排   是有效的。从孩子到父母的遏制顺序如下   如下:

     

内容视图控制器和具有的容器视图控制器   灵活的边界(例如页面视图控制器)

     

导航视图控制器

     

标签栏控制器

     

拆分视图控制器

我会首先尝试更简单有效的容器安排,看看它是否能解决问题。请注意,即使您解决了这个特定问题,如果您继续使用您的层次结构,您仍可能遇到意外且可能不一致的UI问题。

答案 4 :(得分:1)

您可以尝试此代码(我知道,这是不安全的)

-(void)webViewDidFinishLoad:(UIWebView *)webView
 {
   if(self.navigationController.navigationBar.translucent == YES)
   {

    _webView.scrollView.contentOffset = CGPointMake(_webView.frame.origin.x, _webView.frame.origin.y - 54);

   }
 }

_webView.frame.origin.y

之后的数字

答案 5 :(得分:1)

你好伙伴请看看能帮到你的图片。

当您拥有UIWebview或tableview时,请检查UIwebview(Size Inspector选项卡)右侧自动调整大小的所有方向 enter image description here

你还必须提到Delta Y到-20和Delta Height到20,这是适用于iOS 7