1

我有一个使用 PhoneGap/Cordova (3.0) 构建的 iOS 应用程序,我正在尝试对其进行更新以与 iOS 7 和 Xcode 5 一起正常工作,尤其是新型状态栏。

我在原生 iOS 编程或 Objective-C 方面没有太多经验,所以我几乎只是在进行过程中弄清楚事情,这也是我在 StackOverflow 上的第一篇文章,所以如果我得到请原谅我哪里不对了。

我遇到的问题是这样的:

PhoneGap 包括 InAppBrowser 插件,它是显示在应用程序顶部的单独 WebView(如果没有设置本地 Twitter 帐户,我的应用程序主要用于 Twitter 登录)。对于 iOS 7,这似乎还没有更新,所以状态栏出现在插件中加载的任何网页的顶部。我一直在尝试通过调整 WebView 本身的大小来解决这个问题,使其高度降低 20px,从而为状态栏留出空隙。

这是我一直在修改以尝试达到预期结果的主要代码:

- (void)createViews {

CGRect webViewBounds = self.view.frame;

webViewBounds.origin.y += 20; //added by me
webViewBounds.size.height -= 20; //added by me
[self.view setFrame: webViewBounds]; //added by me

webViewBounds.size.height -= FOOTER_HEIGHT;

self.webView = [[UIWebView alloc] initWithFrame:webViewBounds];
self.webView.autoresizingMask = (UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight);

[self.view addSubview:self.webView];
[self.view sendSubviewToBack:self.webView];

(WebView 也在插件的其他地方调整大小,基于 self.view.frame 并从高度中减去一点以允许屏幕底部的 InAppBrowser 工具栏按钮)

所以这个大小和位置 self.view.frame 适合状态栏下方,然后所有进一步的 WebView 大小调整/调整大小都基于该大小和位置。这几乎可以完美地工作,除了 WebView 本身的高度总是太大(网页底部最终位于工具栏下方)。我从 self.view.frame.size.height 中减去多少完全没有区别。使它按预期工作的唯一事情是注释掉 WebView 上的 autoresizingMask (但当然这会导致其他问题)

经过大量实验(并拉出大量头发),我终于缩小了范围。似乎当 WebView 自动调整大小时,它被视为好像它的 frame.origin.y 设置为 0(它从那里调整大小以正确适合),即使它实际上是 20。当设置为 0 时,它会调整大小正确,但是当设置为任何其他值时,即使它的高度值已经考虑到这一点,它最终也会太高。

因此,我可以通过修改每个 WebView 高度变化以减去其 origin.y 值(20px)来处理这个问题,这似乎可以正常工作,但可以肯定(并且查看实际数字似乎可以确认)这是减去额外的高度两次。这有道理吗?我在这里错过了什么吗?

4

0 回答 0