UIViewController的意外行为autoresizingMask = UIViewAutoresizingFlexibleHeight

时间:2013-10-07 17:39:20

标签: ios uiviewcontroller cordova ios7

我有一个使用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)来解决这个问题,这似乎工作正常,但肯定(并且看实际数字似乎确认)这是减去额外的高度两次。这有意义吗?我在这里错过了什么吗?

0 个答案:

没有答案