gpt4 book ai didi

ios - iOS 8.3 iPad 上的自定义 UIWindow 可在模拟器上运行,但不能在设备上运行

转载 作者:可可西里 更新时间:2023-11-01 06:06:05 25 4
gpt4 key购买 nike

我们的 UIWindow 代码多年来一直用于设置“拦截器”屏幕。我们最近注意到,在 iOS 8.3 iPad 上,当拦截器以横向显示时,拦截器偏移了 256 像素。有一些奇怪的地方:

1)这不会发生在模拟器上,只会发生在设备上

2) 如果拦截器是纵向显示的就没问题

3) 如果拦截器以纵向显示,然后旋转为横向,则没有问题。

4) 间距为256像素,即宽高之差,即1024 - 768 = 256。

我们最近更新到 Xcode 6,所以这也可能是一个因素...

通过使用默认的 Xcode Master Detail 项目并对“insertNewObject”方法进行一些小的更改,可以很容易地重现此问题,如下所示:

    UIWindow *blocker;

- (void)insertNewObject:(id)sender {


blocker = [[UIWindow alloc] init];
[blocker setBackgroundColor:[UIColor colorWithRed:.0 green:.0 blue:.0 alpha:.8]];
[blocker makeKeyAndVisible];

CGRect r = CGRectMake(0, 0, 768, 1024);
[blocker setFrame:r];


}

如果您在模拟器上运行此代码,然后点击“+”按钮,您将获得:

enter image description here

这是我们所期望的。

但是,在我们的 8.3 iPad 设备上运行的这段完全相同的代码为我们提供了:

enter image description here

关于为什么模拟器工作而设备不工作的任何想法?建议?其他尝试?

[更新]我们只发现一个设备存在这个问题,即 iPad 2。我们还发现在 UIWindow 上设置 rootViewController 可以“解决”这个问题。

最佳答案

这是我们使用的修复方法:

blocker = [[UIWindow alloc] init];
[blocker setBackgroundColor:[UIColor colorWithRed:.0 green:.0 blue:.0 alpha:.8]];

UIViewController *blockerRoot = [UIViewController new];
blocker.rootViewController = blockerRoot;
CGRect r = [[UIScreen mainScreen] bounds];
[blocker setFrame:r];

[blocker makeKeyAndVisible];

我们还能够删除旋转调整代码,因为现在 View Controller 为我们正确地管理了它(至少对于 iOS 8 及更高版本)。这是我们现在使用的代码:(在屏幕旋转时调用)

    - (void)adjustForRotation
{

if ([UIUtil iOS8OrLater]){
// iOS 8 handles this correctly, no need for adjustments...
return;
}

UIInterfaceOrientation io = [[UIApplication sharedApplication] statusBarOrientation];
if (UIInterfaceOrientationIsLandscape(io)){
CGRect r = [[UIScreen mainScreen] bounds];
CGFloat x = r.size.height / 2.0;
CGFloat y = r.size.width / 2.0;
self.center = CGPointMake(x, y);
}
return;
}

关于ios - iOS 8.3 iPad 上的自定义 UIWindow 可在模拟器上运行,但不能在设备上运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30237816/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com