设置UITabBarControllers的selectedIndex属性后,自动旋转被禁用(SDK bug?)

时间:2011-01-19 18:09:07

标签: iphone ipad ios uitabbarcontroller autorotate

问题。我的应用程序中出现了一个非常奇怪的错误。我有一个UITabBarController,它有几个用于选项卡的视图控制器。在视图控制器中,我通过shouldAutorotateToInterfaceOrientation:实现了自动旋转,并且在我做出以下更改之前一直正常工作。

我在视图控制器中实现了滑动手势,以便在标签之间进行更改。这可以通过以下代码完成。

- (void)onSwipeLeft {
  int _count = [[self.tabBarController.tabBar items] count];
  int i = self.view.tag - 1;
  if (i < _count - 1) {
    self.tabBarController.selectedIndex = (i + 1) % _count;
  }
}

同样适用于onSwipeRight

现在,自动旋转仅适用于,直到您向左或向右滑动。之后,shouldAutorotateToInterfaceOrientation:永远不会被调用。

另见。

  • this thread中描述了相同的问题。我有时也会看到 如下所示的日志消息:-[UIWindow beginDisablingInterfaceAutorotation] overflow on <UIWindow: 0x1410e0; frame = (0 0; 320 480); opaque = NO; autoresize = RM+BM; layer = <CALayer: 0x141190>>. Ignoring.我找不到任何其他相关信息。

  • This question似乎在描述同样的问题。

  • This question似乎在描述类似问题,但使用popViewController:。请注意,自SDK 3.2以来,该错误一直存在。

怎么做?这似乎是SDK中的一个错误,它仍然存在于4.1中。有没有人找到解决方法?这似乎是一种常见的情况。

1 个答案:

答案 0 :(得分:0)

我应该早点想到这个。

创建UIWindow+ensureAutorotation.h

#import <UIKit/UIKit.h>

@interface UIWindow (ensureAutorotation)

- (void)beginDisablingInterfaceAutorotation;
- (void)endDisablingInterfaceAutorotation;

@end

UIWindow+ensureAutorotation.m

#import "UIWindow+ensureAutorotation.h"

@implementation UIWindow (ensureAutorotation)

- (void)beginDisablingInterfaceAutorotation {}
- (void)endDisablingInterfaceAutorotation{}

@end

// of course this can be added as a simple category, rather than .h .m files