Я вижу много ошибок в вашем коде.
Прежде всего, вы определяете kPortraitMode и kLandscapeMode, когда UIInterfaceOrientation (Portrait, LandscapeLeft, LandscapeRight и PortraitUpsideDown) являются частью перечисления, поэтому в этом нет необходимости.
Относится к этому первому пункту. Вы предполагаете, что все, кроме UIInterfaceOrientationPortrait, является ландшафтом, что не соответствует действительности, поскольку существует UIInterfaceOrientationPortraitUpsideDown, хотя, если вы не разрешите ориентацию вверх ногами, все должно быть в порядке. Тем не менее, плохая практика.
Во-вторых, вы создаете свой собственный ivar для viewOrientation, когда UIViewController уже имеет свойство interfaceOrientation, так что это лишняя память, которую вы тратите впустую, а также время обработки, назначая ориентацию при ее вращении в willAutorotateToInterfaceOrientation: withDuration:.
И, наконец, при использовании перечислений, imo лучше использовать switch, чем if; Вы пишете меньше кода для сравнения, и это более понятно.
Вот как я это сделаю:
double height = 0.0;
switch(self.interfaceOrientation){
case UIInterfaceOrientationPortrait:
case UIInterfaceOrientationPortraitUpsideDown:
height = 263.0;
break;
case UIInterfaceOrientationLandscapeLeft:
case UIInterfaceOrientationLandscapeRight:
height = 320;
break;
}