我正在使用Three20(ack!)编写的旧代码库。现在我们需要能够将此应用程序部署到iOS7和iOS6。
大多数情况下,它正在工作,但是当用户点击并导致视图控制器之间切换时,导航栏会在转换动画期间使用44点导航栏进行绘制,但是当动画完成后它会捕捉到64高点。
所以,换一个视图......顺利......黄油...... 猛击。洗涤,冲洗,重复。
当你在任何iOS 7 iPhone大小的设备上从一个视图切换到另一个视图时,它会产生这样的颤抖效果。有趣的是,它只在从一个视图切换到另一个视图时发生,而不是在切换到当前ViewController的新实例时发生。
我会显示代码,但我不确定要显示的代码。
我很感激任何指针(RTFM评论很高兴接受),这次我的Google-fu失败了。
视图层次结构如下所示: UIScreen TTNavigatorWindow UILayoutContainerView UINavigationTransitionView UIViewControllerWrapperView 的UIView TTTableView UITableViewWrapperView ......等等......
这是一个三十二的问题,其中three20假设导航栏总是44点高,但现在他们不是?
这是一个Interface Builder问题,导航栏只能在44点创建,我应该在我的代码中处理好这个问题吗?
这是一个深奥的iOS 7问题,因为导航器处于顶层,它需要定期更改高度吗?
这是一个文档问题,我的(显然微薄的)观察能力只是没有看到Apple文档中的相关位吗?
谢谢,
-Ken
答案 0 :(得分:1)
首先,我想建议摆脱Three20。我知道这对你的情况没有多大帮助,但确实如此。
但随后我想就可能发生的事情向你提出两个想法:
Three20确实在不同的地方使用了硬编码的导航栏大小,但我认为这不会导致您在此处描述的问题。我可能虽然很确定它会在其他地方引起iOS7问题。
根据您的描述,听起来像iOS7计算导航栏高度的方式可能就是问题所在。因为三者如何管理视图会以某种方式推断的原因,因为它适用于普通的UIKit。如果将整个视图堆栈向下移动到屏幕底部会发生什么?我想,导航栏不会改变它的大小。要了解这一点,请查看how iOS7 calculates the navigation bar height。我想你想拥有的是整个动画中的64 px导航栏。我将不得不弄清楚如何修改动画之前呈现的视图控制器的帧以实现该效果。
我希望其中一些想法可以提供帮助。