前言
最近项目遇到一个需求:从一个viewController A模态出一个新的viewController B, 要求B占领屏幕的下半部分,上半部分透明.如下图:
思路是将B控制器的背景颜色设置为透明色(注意,不是设置alpha = 0
, 而是self.view.backgroundColor = [UIColor clearColor];
),但是发现这样的话,屏幕的上半部分会变黑,如下图:
本文记录了实现该效果的方法.
干货
经过google, 最终发现是因为modal时,需要设置弹出的控制器(B)的属性.
- (void)modal {
UIViewController *B = [[UIStoryboard storyboardWithName:@"Main" bundle:[NSBundle mainBundle]]instantiateViewControllerWithIdentifier:@"ViewControllerTow"];
B.modalPresentationStyle = UIModalPresentationOverCurrentContext;
B.modalTransitionStyle = UIModalTransitionStyleCoverVertical;
[self presentViewController:B animated:YES completion:nil];
}
另外
有一篇文章中写道, 以上设置是ios8之后才能用到的代码,ios8之前是设置A控制器的,即谁弹出控制器,谁就设置以下属性:
- (void)modal {
UIViewController *two = [[UIStoryboard storyboardWithName:@"Main" bundle:[NSBundle mainBundle]]instantiateViewControllerWithIdentifier:@"ViewControllerTow"];
self.modalPresentationStyle = UIModalPresentationCurrentContext;
[self presentViewController:two animated:YES completion:nil];
}
综上
- (void)modal {
UIViewController *two = [[UIStoryboard storyboardWithName:@"Main" bundle:[NSBundle mainBundle]]instantiateViewControllerWithIdentifier:@"ViewControllerTow"];
float version = [UIDevice currentDevice].systemVersion.floatValue;
if (version < 8.0) {
self.modalPresentationStyle = UIModalPresentationCurrentContext;
} else {
[self presentViewController:two animated:YES completion:nil];
}
}
由于手头没有8.0以下版本的设备,所以希望有条件的童鞋帮忙测试一下,并反馈给我,谢谢大家.