开发者

Autorotation disabled after setting selectedIndex property of UITabBarControllers (SDK bug?)

The problem. I'm getting a very strange error in my application. I have a UITabBarController with several view controllers for the tabs. In the view controllers I have implemented autorotation via shouldAutorotateToInterfaceOrientation: and it was working fine until I made the following change.

I implemented swipe gestures in the view controllers to change between tabs. This is accomplished via the following code.

- (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;
  }
}

And similarly for onSwipeRight.

Now, autorotation only works until you swipe left or right. After that, shouldAutorotateToInterfaceOrientation: is never called at all.

See also.

  • In this thread the identical problem is described. I also sometimes see a log message like the following: -[UIWindow beginDisablingInterfaceAutorotation] overflow on <UIWindow: 0x1410e0; frame = (0 0; 320 480); opaque = NO; autoresize = RM+BM; layer = <CALayer: 0x141190>>. Ignoring. I can't find any other information about this.

  • This question seems to be describing the same problem.

  • This question seems to be describing a similar problem but with popViewController:. Note that the bug has been there since SDK 3.2.

What to do? It seems like a bug in the SDK which is still present in 4.1. Has anyone found a workaround? It 开发者_如何学运维seems like a common scenario.


I should have thought of this earlier.

Create UIWindow+ensureAutorotation.h:

#import <UIKit/UIKit.h>

@interface UIWindow (ensureAutorotation)

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

@end

And 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
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜