using sdk 4.2, I am adding a small button to the tabBarController in my app in my 
didFinishLaunchingWithOptions method of the app delegate. The idea is that this when made visible shows at the top of any viewcontroller showing on the screen. The user can tab between views and this button is still visible.

```
    NSLog(@"tabBarController bounds:    %@",NSStringFromCGRect(self.tabBarController.view.bounds));
 self.Btn = [[UIButton buttonWithType:UIButtonTypeCustom] retain];
 self.Btn.frame = CGRectMake(80, 20, 160, 20);
 self.Btn.hidden = YES;
 [self.Btn addTarget:self action:@selector(launch:)  forControlEvents:UIControlEventTouchUpInside];
 [self.Btn setBackgroundImage:[UIImage imageNamed:@"launch.png"]  forState:UIControlStateNormal];
 [self.tabBarController.view addSubview:self.Btn];

```

Bounds of the tabBarcontroller as printed out by NSLog
{{0, 0}, {320, 480}}

I make the frame of the button CGRectMake(80, 20, 160, 20); So i offset it 20 down to allow
for the status bar. This works most of the time, when i make the button visible it shows
in the right place at the top of the visible viewcontroller. Sometimes however the button moves downwards as though the bounds of the tabBarcontroller changed to 0,0,320,460. So the button is now relative to the new bounds so is an extra 20 pixels down from the top of the screen. 

Once its moved it always stays like this until i kill the app from the task switcher and restart.
Anybody any idea what would cause this and how to solve. Thanks