【问题标题】:UIWebView changes contentSize on iOS 7 after coming back from background从后台返回后,UIWebView 在 iOS 7 上更改 contentSize
【发布时间】:2013-12-14 07:16:32
【问题描述】:

问题:

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

在监控UIWebView 的contentSize 后,当应用程序进入前台时(我通过观察UIApplicationDidBecomeActiveNotification 进行检查),它的高度减去了49。

屏幕截图(已编辑敏感信息):

我的设置:

我在我的UIViewController 中使用UIWebView,该UITabBarViewController 嵌入在UINavigationController 中。我正在使用情节提要并启用了“调整滚动视图插图”、“从 NIB 调整视图大小”和“在 Tob 栏下扩展边缘”。在UIWebView 上,我未选中“缩放页面以适合”。我没有在 viewDidAppear 或 viewWillAppear 方法中做任何事情。我在 iOS 6 上测试过,问题没有出现。另外,我没有使用自动布局。

相关代码:

self.webView.scrollView.scrollEnabled = NO;
self.webView.scrollView.bounces = NO;
self.webView.scalesPageToFit = NO;

监控viewDidAppear & appHasGoneInForeground中的contentSize & frame后:

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

有人知道我在这里缺少什么和/或为什么会发生这种情况吗?感谢您的宝贵时间!

【问题讨论】:

  • 问题出在 iphone5 上?
  • 是的,截图来自iPhone 5。虽然我只是在模拟器中测试了3,5"屏幕,但也出现了问题
  • 设置屏幕大小窗口边界不适用于硬代码
  • 您能详细说明一下吗?我不会对 3,5" 或 4" 屏幕的视图进行硬编码。
  • 如何设置uiwebview大小

标签: ios iphone objective-c uiwebview ios7


【解决方案1】:

你可以设置ContentSize或者frame on:

-(void)viewDidLayoutSubviews

在 xib 底部设置 UIWebview

否则你可以设置

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

【讨论】:

  • 在viewDidLayoutSubviews 中设置我的 contentSize 并没有解决问题:(
【解决方案2】:

“我在 UIViewController 中使用 UIWebView,该 UIWebView 嵌入在 UINavigationController 中的 UITabBarViewController 中”。

Apple 不支持此功能。 link

...收容顺序很重要;只有某些安排 是有效的。包含的顺序,从孩子到父母,是 如下:

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

导航视图控制器

标签栏控制器

拆分视图控制器

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

【讨论】:

  • 嗯,那太可惜了,但我会尝试分支和重组以交换 UINavigationController 和 UITabBarController,看看这是否有什么不同。
  • 我对其进行了重组,使其以ViewController 模式加载。现在不会出现这个问题了。 +1 建议重组。
  • 很高兴我能帮上忙。我希望 Apple 能够像我从他们那里引用的那样在他们的 SDK 规则中执行,或者至少在违反这些规则时发出警告,而不是指望我们熟记于心。
【解决方案3】:

嗨,伙计,请看对你有帮助的图片。

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

您还必须提到适用于 iOS 7 的 Delta Y 为 -20 和 Delta Height 为 20

【讨论】:

  • 对不起,我已经有了这些设置的自动调整大小。添加 iOS 6/7 deltas 不起作用。
  • 嘿伙计不要为iOS 6添加增量,只为iOS 7添加这个。对于其他版本,它将由系统计算。
  • 该选项被称为“iOS 6/7 Deltas”.. :P
【解决方案4】:

你可以试试这段代码(我知道,它不安全)

-(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】:

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

如果您不使用 AutoLayout,请将 autoresizingMask 设置为固定前导和尾随空格:

webView.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth;

如果这不起作用,您可以使用 KVO 添加 hack/解决方法(请仅将其用作最后的手段,因为这不是好的做法):

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

然后实现方法

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

并将 contentSize 设置回应有的值。

【讨论】:

  • 太棒了,我会尝试并在这里报告!顺便说一句,我没有使用 autoLayout。
  • 显式设置 autoresizingMask 没有帮助。很奇怪。我也尝试了你的黑客,这对我也不起作用。我正在检查 contentsize 是否低于- (void) observeValueForKeyPath 中的所需大小,然后将 contentSize 设置为正确的大小。我是否需要使用 setNeedsLayout 或其他东西来实现更改?因为我的 NSLogs 现在在返回应用程序后指示正确的 contentSize
  • @Thermometer 您是否还验证了 webview 的框架是否正确?可能是框架正在修改。
  • 是的,框架没有改变。
  • 我在viewDidAppear 和appHasGoneInForeground 中加载视图时打印框架、插图和内容大小,看看有什么区别。首先contentSize为320x504,frame为320x455,inset为0。回来后contentSize为320x455,frame为320x455,inset为0。
【解决方案6】:

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

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

希望对你有帮助。

【讨论】:

  • 这不应该改变内容的大小。
  • 抱歉,更改此属性没有帮助。感谢您尝试提供帮助
  • 感谢@mengxiangjian,为我节省了数小时的调试时间!
  • 太棒了!我为此苦苦挣扎了一段时间(使用自动布局)。现在,无论屏幕大小如何,我的 Web 视图的内容都会填满整个屏幕。我取消选中了我的视图控制器(不是 webview)选项的“调整滚动视图插图”选项并解决了问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-07-24
  • 1970-01-01
  • 1970-01-01
  • 2012-02-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多