C'est le comportement par défaut de UIViewController sous iOS 7. La vue sera en plein écran, ce qui signifie que la barre d'état couvrira le haut de votre vue.
Si vous avez un UIViewController dans un UINavigationController et que la barre de navigation est visible, vous pouvez avoir le code suivant dans votre viewDidLoad ou faire en sorte qu'une image d'arrière-plan pour la barre de navigation fasse l'affaire.
self.edgesForExtendedLayout = UIRectEdgeNone;
Si la barre de navigation est masquée, vous devez ajuster tous les éléments UIView en décalant de 20 points. Je ne vois pas d'autre solution. L'utilisation de la mise en page automatique aidera un peu.
Voici l'exemple de code permettant de détecter la version d'iOS, si vous souhaitez assurer la rétrocompatibilité.
NSUInteger DeviceSystemMajorVersion() {
static NSUInteger _deviceSystemMajorVersion = -1;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
NSString *systemVersion = [UIDevice currentDevice].systemVersion;
_deviceSystemMajorVersion = [[systemVersion componentsSeparatedByString:@"."][0] intValue];
});
return _deviceSystemMajorVersion;
}