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:之间,viewDidLoadviewWillAppear:前面,所以你不能这样做。你应该在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 不显示

维护添加到 KeyWindow 的自定义 UIView

[UIApplication sharedApplication].keyWindow 添加视图无效,解决方案。

为啥在 subView 中添加 UILabel 会使其像素化

通过 subView 禁用触摸视图

keywindow 在 ([[[UIApplication sharedApplication] keyWindow] addSubview:myView];) iOS 6 中不起作用