Soundcloud: SCLoginViewController se superpone a la barra de estado cuando se presenta desde otro controller de vista

Para mi aplicación de iPhone, quiero implementar la opción de upload files a Soundcloud haciendo uso de CocoaSoundCloudAPI . En las instrucciones " Cómo usar directamente la API de SoundCloud " se explica cómo presentar un loginViewController manera loginViewController :

 - (void)login { [SCSoundCloud requestAccessWithPrepanetworkingAuthorizationURLHandler: ^(NSURL *prepanetworkingURL){ SCLoginViewController *loginViewController; loginViewController = [SCLoginViewController loginViewControllerWithPrepanetworkingURL:prepanetworkingURL completionHandler:^(NSError *error){ if (SC_CANCELED(error)) { NSLog(@"Canceled!"); } else if (error) { NSLog(@"Ooops, something went wrong: %@", [error localizedDescription]); } else { NSLog(@"Done!"); } }]; [self presentModalViewController:loginViewController animated:YES]; }]; } 

Ahora reemplacé

  [self presentModalViewController:loginViewController animated:YES]; 

con

  [self presentViewController:loginViewController animated:YES completion:nil]; 

porque el primer método está en desuso en iOS 7.

Pero el problema es que Soundcloud loginViewController superpone a la barra de estado cuando se presenta de esta manera. Y dado que no quiero cambiar la API de Soundcloud, no tengo la opción de personalizar el loginViewController por ejemplo, en su método - viewDidLoad (como se sugiere en muchas otras publicaciones en Stackoverflow).

introduzca la descripción de la imagen aquí

Desafortunadamente, hay una barra de herramientas con un button en la parte superior de loginViewController . ¿Cómo puedo configurar mi loginViewController desde mi propio controller (de presentación) para que no se superponga con la barra de estado cuando se presenta?

Como mencioné en mi comentario a la pregunta original, no encontré una solución clara para este problema. Sin embargo, logré implementar una solución que hace el trabajo:

La idea básica es agregar el SCLoginViewController como un controller de vista secundario de otro controller de vista personalizado que no es parte del marco de Soundcloud y que puede personalizar según sus necesidades. Este es mi nuevo método de inicio de session que presenta el controller de vista de inicio de session:

 - (BOOL)loginToSoundcloud { BOOL __block success = NO; [SCSoundCloud requestAccessWithPrepanetworkingAuthorizationURLHandler:^(NSURL *prepanetworkingURL){ SCLoginViewController *loginViewController; loginViewController = [SCLoginViewController loginViewControllerWithPrepanetworkingURL:prepanetworkingURL completionHandler:^(NSError *error){ if (SC_CANCELED(error)) { NSLog(@"Canceled!"); } else if (error) { NSLog(@"Ooops, something went wrong: %@", [error localizedDescription]); } else { NSLog(@"Done!"); success = YES; } }]; /* BEGIN workaround for iOS7 bug: when modally presenting a view controller it overlaps the status bar */ CBContainerVCToFixStatusBarOverlap *containerVC = [[CBContainerVCToFixStatusBarOverlap alloc] init]; [containerVC addChildViewController:loginViewController]; containerVC.view.backgroundColor = [UIColor clearColor]; if ([CBAppDelegate iOSVersionIs7OrHigher]) { loginViewController.view.frame = CGRectMake(loginViewController.view.frame.origin.x, loginViewController.view.frame.origin.y + 20, containerVC.view.frame.size.width, containerVC.view.frame.size.height - 20); } else { loginViewController.view.frame = CGRectMake(loginViewController.view.frame.origin.x, loginViewController.view.frame.origin.y, containerVC.view.frame.size.width, containerVC.view.frame.size.height); } [containerVC.view addSubview:loginViewController.view]; /* END workaround for iOS7 bug */ [self presentViewController:containerVC animated:YES completion:nil]; }]; return success; } 

Para verificar la versión de iOS implementé el siguiente método en mi CBAppDelegate:

 + (BOOL)iOSVersionIs7OrHigher { return floor(NSFoundationVersionNumber) > NSFoundationVersionNumber_iOS_6_1; } 

CBContainerVCToFixStatusBarOverlap es una class de controller de vista simple sin methods adicionales y solo una propiedad declarada. Este es el contenido de CBContainerVCToFixStatusBarOverlap.h:

 @interface CBContainerVCToFixStatusBarOverlap : UIViewController @property (strong, nonatomic) IBOutlet UIView *containerView; @end