Mis*_*cha 5 objective-c statusbar overlap ios soundcloud
对于我的iPhone应用程序,我想实现通过使用CocoaSoundCloudAPI将文件上传到Soundcloud的选项.在" 如何直接使用SoundCloud API "说明中,解释了如何以模态方式呈现loginViewController:
- (void)login {
[SCSoundCloud requestAccessWithPreparedAuthorizationURLHandler:
^(NSURL *preparedURL){
SCLoginViewController *loginViewController;
loginViewController =
[SCLoginViewController loginViewControllerWithPreparedURL:preparedURL
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];
}];
}
Run Code Online (Sandbox Code Playgroud)
现在我换了
[self presentModalViewController:loginViewController
animated:YES];
Run Code Online (Sandbox Code Playgroud)
同
[self presentViewController:loginViewController
animated:YES
completion:nil];
Run Code Online (Sandbox Code Playgroud)
因为第一种方法在iOS 7中已弃用.
但问题是,loginViewController当以这种方式呈现时,Soundcloud会重叠状态栏.由于我不想更改Soundcloud API,因此我没有选择loginViewController相应的- viewDidLoad方法,例如在其方法中(如Stackoverflow上的许多其他帖子所示).

不幸的是,有一个工具栏,顶部有一个按钮loginViewController.如何loginViewController从我自己的(呈现)视图控制器内部配置我,使其在呈现时不会与状态栏重叠?
正如我对原始问题的评论中提到的,我没有找到解决这个问题的简洁方法.但是我设法实现了完成工作的解决方法:
基本思想是添加SCLoginViewController另一个自定义视图控制器的子视图控制器,该视图控制器不是Soundcloud框架的一部分,您可以根据需要进行自定义.这是我的新登录方法,它显示了登录视图控制器:
- (BOOL)loginToSoundcloud {
BOOL __block success = NO;
[SCSoundCloud requestAccessWithPreparedAuthorizationURLHandler:^(NSURL *preparedURL){
SCLoginViewController *loginViewController;
loginViewController =
[SCLoginViewController loginViewControllerWithPreparedURL:preparedURL
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;
}
Run Code Online (Sandbox Code Playgroud)
为了检查iOS版本,我在CBAppDelegate中实现了以下方法:
+ (BOOL)iOSVersionIs7OrHigher {
return floor(NSFoundationVersionNumber) > NSFoundationVersionNumber_iOS_6_1;
}
Run Code Online (Sandbox Code Playgroud)
CBContainerVCToFixStatusBarOverlap是一个简单的视图控制器类,没有其他方法,只有一个声明的属性.这是CBContainerVCToFixStatusBarOverlap.h的内容:
@interface CBContainerVCToFixStatusBarOverlap : UIViewController
@property (strong, nonatomic) IBOutlet UIView *containerView;
@end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
329 次 |
| 最近记录: |