UINavigationBar 也有类似的问题。
在一种情况下,它位于自定义拆分视图中(我们不能使用 UIKit,因为 iOS 5.0 中缺少一些功能)以及 UINavigationController 将其视图添加到另一个视图中。
控制器层次结构的使用在这里有很大帮助,似乎 iOS 在决定如何布局 UINavigationBar 时也会注意这一点。我能够拥有一个由操作系统定义的正确高度的 UINavigationController,而无需 UINavigationBar 与其 UIWindow 的顶部连续,因此可以这样做。
但是有一个问题,当视图第一次出现时,它的高度不正确,然后自动增加到 64 像素的正确高度。
从一开始就获得具有正确高度的视图的解决方案是最初使用屏幕的整个宽度定义视图,然后使用 [UIViewController viewDidLayoutSubviews] 方法以我想要的宽度定义视图的框架。
这意味着控制器正在按照我想要的方式进行 UINavigationBar 的布局,然后我将更正视图的框架,这不会改变 UINavigationBar 的高度。
对于OP提出的具体情况,你可以反其道而行之。首先定义一半宽度的视图,使栏在开始时很小,然后将宽度改回您想要的宽度。我在另一种情况下对此进行了测试,它也有效,但它没有动画,这可能会扼杀我的解决方案。我建议更改宽度和 x 位置。
这是一个可怕的 hack,所以如果有人想出一个允许我删除此代码的解决方案,请分享。