UIInterfaceOrientation右侧的屏幕移位

时间:2015-01-05 19:47:50

标签: ios ios8 landscape

我的应用程序主要显示照片。

该应用程序最初是为iOS 3.1编写的,并在发布之前升级为4。从那时起它就没有被触动过。现在,API的所有者应用了一些与他们认为不兼容的更改,我被迫更新应用程序。因此,我必须一次性去iPhone 5和6以及6+和iOS 7和8更新。

我在iphone 4,5和6+维度的模拟器中观察到这种行为。

肖像看起来不错。 景观左看也很好。 景观正确搞砸了。显然看起来好像整个屏幕都向左移动了。

Landscape left, OK Landscape right, shifted Portrait, OK

这很奇怪,因为我不知道任何对于左右风景我会做出什么不同的事情。我所做的只是在任何肖像和任何横向方向之间存在差异。

它在旧版本中运行良好。但坦率地说,我不能再复制这个了,因为我无法访问旧的xcode和sdk版本。但该应用程序存储多年,在现代设备和现代操作系统版本上运行良好。

更多背景信息,以防万一重要:

该应用基于UITabBar,但在此视图中不可见。

图像可滚动。它被放置在一个视图的三倍大小的屏幕上,前面和后面的图像视图分别放在左边和右边。具有三个图像的该视图分别放置在屏幕或窗口大小的滚动视图内。这个概念仍然适用于文件,它只是转移了。

当我在调试器或NSLog中检查视图项的帧时,它们似乎都是正确的,分别从(0.0 / 0.0)开始。

底部的视图以及导航到相关功能及其视图控制器的四个按钮,在每次旋转时以编程方式重新排列,以及带有文本信息的叠加层。一切正常,但它在这一个方向上移动了。 好吧,所有视图都在每次轮换时以编程方式进行布局。

没有定义约束。 iOS6 / 7增量都设置为0.

该应用程序需要全屏"。通过点击图像,所有UI项目都会消失并重新显示在下一个选项卡上。 (只需设置.hidden属性。除了导航栏。这是使用setNavigationBarHidden管理的:动画:动画上带有YES)即使在移位视图中也能正常工作。

我的想法已经不多了。

1 个答案:

答案 0 :(得分:0)

虽然我把所有细节放在一起提出问题,但最终有一个想法得到了解决。

该问题与隐藏标签栏有关。我无法使用隐藏标签栏的常规方式,因为当导航到与底部叠加视图上的按钮关联的功能时,它不会重新出现。

因此我做了某种黑客攻击。我没有定期隐藏它,而是将标签栏移出屏幕。 AND:这是我对景观和景观留下的唯一不同的做法。我只是搜索了常量名称并找到了它。

显然,操纵标签栏视图在较旧的iOS版本中存在缺陷。 (或者在较旧的SDK版本中,我仍在处理这个重要的细节)

为了克服这个缺陷,标签栏视图以这种方式修改为右侧景观:

[self.tabBarController.view setFrame:CGRectMake(0-kTabBarHeight,0,width+kTabBarHeight,height)];

这似乎没有任何意义,但在几年前编写应用程序时类似的问题确实帮了我很多。 现在,我将其更改为:

[self.tabBarController.view setFrame:CGRectMake(0,0,width+kTabBarHeight,height)];

对于景观也是如此。

对于时间的推移,我将iOS版本> = 8.0和更小版本分开。但我会仔细检查旧设备,以后可能会回到这个问题。

我留下了问题,因为我也发现了原来的“hack”,所以我猜其他人在分别更新到ios 8或SDK 8时会遇到同样的问题。

感谢收听。