问题:
我的UIWebView
和UINavigationBar
之间有一个UITabBar
。在iOS 7上,当应用程序进入后台并再次返回时,似乎contentSize
的{{1}}属性发生了变化,因此其上方有一个白色块。
在监视UIWebView
的{{1}}之后,当应用程序进入前景时(我通过观察contentSize
来检查它),它从它的高度减去了49。
屏幕截图(编辑敏感信息):
我的设置:
我在我的UIWebView
中使用UIApplicationDidBecomeActiveNotification
,UIWebView
嵌入在UIViewController
中嵌入UITabBarViewController
。我正在使用故事板并具有“调整滚动视图插入”,“从NIB调整视图大小”和“在条形图下扩展边缘”。在UINavigationController
我没有选中“Scales Page To Fit”。我在UIWebView
或viewDidAppear
方法中没有做任何事情。我在iOS 6上测试过它,问题不会发生在那里。另外,我没有使用自动布局。
相关代码:
viewWillAppear
监控contentSize& self.webView.scrollView.scrollEnabled = NO;
self.webView.scrollView.bounces = NO;
self.webView.scalesPageToFit = NO;
&中的框架viewDidAppear
帧从320x455变为320x455 contentSize从320x504到320x455
有没有人知道我在这里缺少什么和/或为什么会这样?谢谢你的时间!
答案 0 :(得分:20)
请在webView的viewController中尝试self.automaticallyAdjustsScrollViewInsets = NO
。
automaAdjustsScrollViewInsets是iOS7 SDK中的新属性,默认值为YES。它可以在iOS7中自动调整viewController的scrollView。您可以通过谷歌搜索获得更多信息。
我希望它可以帮到你。
答案 1 :(得分:6)
您可以在以下位置设置内容大小或框架:
-(void)viewDidLayoutSubviews
在xib bottomscle中设置UIWebview
另外,你可以设置
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选项卡)右侧自动调整大小的所有方向
你还必须提到Delta Y到-20和Delta Height到20,这是适用于iOS 7