All of my ViewController classes inherit from MyBaseViewController which has a custom viewDidLoad method:
- (void)viewDidLoad {
int x = self.view.bounds.size.width / 2;
int y = self.view.bounds.size.height / 2;
self.spinner = [[UIActivityIndicatorView alloc] initWithFrame:CGRectMake(x, y, 50, 50)];
self.spinner.activityIndicatorViewStyle = UIActivityIndicatorViewStyleGray;
[self.view addSubview:self.spinner];
[self.spinner startAnimating];
}
Each child class calls [super viewDidLoad] in its own viewDidLoad method. However, the spinner is always 'centered' as though the device is in portrait mode, rather than landscape, and the application is locked to landscape mode, as you can see here:

Why is this?
The calling sequence of view controller methods as below :-
1) viewDidLoad 2) viewWillAppear 3) viewDidAppear
The BaseviewController as Parent class in your case. When Child class loaded then it will call your child class orientation method. You need to call your base class viewcontroller method once child class orientation method get called.
Please check your orientation method get called or not. So Activity indicator will show middle of the screen.
Also try to avoid writing orientation code in viewDidLoad method. Please add your code in viewWillAppear or viewDidAppear method.