我使用keyWindow添加了一个subView,它添加成功,但没有显示在屏幕层次结构的前面。
深灰色视图是我添加的视图:

我的代码是:
@interface ViewController ()
{
LMLUpspringView *pop_v;
}
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
pop_v = [[LMLUpspringView alloc] initWithFrame:CGRectMake(0, 0, self.view.bounds.size.width, self.view.bounds.size.height)];
UIWindow *keywindow = [[[UIApplication sharedApplication] delegate] window];
[keywindow addSubview:pop_v];
//[keywindow bringSubviewToFront:pop_v];
//[self.view addSubview:pop_v];
}我曾尝试使用[keywindow bringSubviewToFront:pop_v]给front.But带来不起作用。
如果我使用[self.view addSubview:pop_v],它会显示在前面。
发布于 2017-04-25 16:47:31
你遇到这个问题,是因为你不知道viewDidLoad方法和viewDidAppear:方法之间的区别。
viewWillAppear:
在将视图添加到窗口的视图层次结构之前调用
viewDidAppear:
在视图添加到视图层次结构后调用
控制器的视图添加到窗口的视图层次结构是在viewWillAppear:和viewDidAppear:之间,viewDidLoad在viewWillAppear:的前面,所以您不能这样做。您应该在viewDidAppear:中添加视图。
发布于 2017-04-25 16:46:49
您可以使用appdelegate的Windows来解决此问题:
AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
[appDelegate.window addSubview:pop_v]发布于 2017-04-25 18:21:45
使用以下命令:
@interface ViewController ()
{
LMLUpspringView *pop_v;
}
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
pop_v = [[LMLUpspringView alloc] initWithFrame:CGRectMake(0, 0, self.view.bounds.size.width, self.view.bounds.size.height)];UIWindow *keywindow = [UIApplication sharedApplication keyWindow];
[keywindow addSubview:pop_v];
//[keywindow bringSubviewToFront:pop_v];
//[self.view addSubview:pop_v];
}https://stackoverflow.com/questions/43605689
复制相似问题