KeyWindow添加subView,前面没有显示
Posted
技术标签:
【中文标题】KeyWindow添加subView,前面没有显示【英文标题】:KeyWindow add subView, did not shows in the front 【发布时间】:2017-04-25 08:42:42 【问题描述】:我使用keyWindow添加了一个子视图,添加成功但没有显示在屏幕层次结构的前面。
深灰色视图是我添加的视图:
我的代码是:
@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]
将其带到前面。但不工作。
如果我使用[self.view addSubview:pop_v]
,它会显示在前面。
【问题讨论】:
【参考方案1】:你遇到这个问题,是因为你不知道viewDidLoad
方法和viewDidAppear:
方法的区别。
viewWillAppear:
在视图添加到窗口的视图层次结构之前调用
viewDidAppear:
在视图添加到视图层次结构后调用
添加到窗口视图层次结构中的控制器视图在viewWillAppear:
和viewDidAppear:
之间,viewDidLoad
在viewWillAppear:
前面,所以你不能这样做。你应该在viewDidAppear:
添加你的观点。
【讨论】:
【参考方案2】:您可以使用 appdelegate 的 Windows 解决这个问题:
AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
[appDelegate.window addSubview:pop_v]
【讨论】:
【参考方案3】:使用这个:
@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];
【讨论】:
以上是关于KeyWindow添加subView,前面没有显示的主要内容,如果未能解决你的问题,请参考以下文章
iOS 7 - UIScrollView subView 不显示
[UIApplication sharedApplication].keyWindow 添加视图无效,解决方案。
为啥在 subView 中添加 UILabel 会使其像素化
keywindow 在 ([[[UIApplication sharedApplication] keyWindow] addSubview:myView];) iOS 6 中不起作用