0

我正在使用 Three20 (ack!) 编写的旧代码库。现在我们需要能够将这个应用程序部署到 iOS7 和 iOS6。

大多数情况下,它可以工作,但是当用户点击并导致在视图控制器之间切换时,导航栏在过渡动画期间使用 44 点导航栏绘制,但当动画完成时,它会捕捉到 64 点高。

所以,换一个视角……顺滑……黄油……猛击。洗涤,冲洗,重复。

当您在任何 iOS 7 iPhone 大小的设备上从一种视图切换到另一种视图时,会出现这种颤抖的效果。有趣的是,它只在从一个视图切换到另一个视图时发生,而不是在切换到当前 ViewController 的新实例时发生。

我会显示代码,但我不确定要显示什么代码。

我非常感谢任何指点(很高兴接受 RTFM 评论),我的 Google-fu 这次让我失望了。

视图层次结构看起来像这样: UIScreen TTNavigatorWindow UILayoutContainerView UINavigationTransitionView UIViewControllerWrapperView UIView TTTableView UITableViewWrapperView ...等等...

这是一个three20 问题,其中three20 假设导航栏总是44 点高,但现在不是?

这是一个界面生成器问题,导航栏只能在 44 点创建,我应该在我的代码中很好地处理这个问题吗?

这是一个深奥的 iOS 7 问题,因为导航器位于顶层,它需要定期更改高度?

这是一个文档问题,我的(显然微不足道的)观察能力只是没有在 Apple 文档中看到相关内容吗?

谢谢,

-肯

4

1 回答 1

1

首先,我想建议摆脱 Three20。我知道这对您的情况不是很有帮助,但确实如此。

但是,我想为您提供两个关于可能发生的想法:

  • Three20 确实在各个地方使用了硬编码的导航栏大小,但我认为这不会导致您在此处描述的问题。我可能虽然很确定它会在其他地方导致 iOS7 出现问题。

  • 根据您的描述,这听起来像 iOS7 计算导航栏高度的方式可能是问题所在。当然,这会以某种方式推断出three20如何管理视图,因为它适用于普通的UIKit。如果您将整个视图堆栈向下移动 1 px,朝向屏幕底部会发生什么?我想,导航栏不会改变它的大小。要了解这一点,请查看iOS7 如何计算导航栏高度。我猜你想要的是贯穿整个动画的 64 像素导航栏。我必须弄清楚如何修改在动画之前呈现的视图控制器的框架以实现该效果。

我希望其中一些想法会有所帮助。

于 2013-10-28T08:12:23.750 回答