【问题标题】:Screen Shift on UIInterfaceOrientationLandscapeRightUIInterfaceOrientationLandscapeRight 上的屏幕切换
【发布时间】:2015-01-05 19:47:49
【问题描述】:

我有这个应用程序主要显示照片。

该应用最初是为 iOS 3.1 编写的,并在发布之前升级到了 4。从那以后就再也没有碰过它。现在 API 的所有者应用了一些不像他们想象的那样兼容的更改,我不得不更新应用程序。因此,我将不得不一口气进行 iPhone 5、6 和 6+ 以及 iOS 7 和 8 的更新。

我在 iphone 4、5 和 6+ 尺寸的模拟器中观察到这种行为。

肖像看起来不错。 左边的风景看起来也不错。 景观权利被搞砸了。显然它看起来好像整个屏幕都向左移动了。

这很奇怪,因为我不知道我会为左右横向做任何不同的事情。我所做的只是区分任何纵向和横向。

在旧版本中运行良好。但坦率地说,我无法再重现这一点,因为我无法访问旧的 xcode 和 sdk 版本。但该应用已上市多年,可在现代设备和现代操作系统版本上正常运行。

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

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

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

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

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

没有定义约束。 iOS6/7 的 deltas 都设置为 0。

应用“想要全屏”。通过点击图像,所有 UI 项目都会消失并重新出现在下一个选项卡上。 (只需设置 .hidden 属性即可。导航栏除外。使用 setNavigationBarHidden:animated: 对动画进行 YES 管理)即使在移动视图中也可以正常工作。

我的想法不多了。

【问题讨论】:

    标签: ios ios8 landscape


    【解决方案1】:

    虽然我将问题的所有细节放在一起,但最终一个想法救了我。

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

    因此,我做了一些 hack。我没有定期隐藏它,而是将标签栏移出屏幕。 并且:这是我对横向右侧和横向左侧所做的唯一不同的事情。我只是搜索了常量名称并找到了它。

    显然,操纵标签栏视图在旧 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 和更小版本分开。但我会用旧设备仔细检查一下,以后可能会回到这个答案。

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

    感谢您的收听。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多