如何在屏幕的某个部分添加另一个 UIWindow

Posted

技术标签:

【中文标题】如何在屏幕的某个部分添加另一个 UIWindow【英文标题】:how to add another UIWindow within the some part of the screen 【发布时间】:2018-02-22 07:55:20 【问题描述】:

我有一个要求,比如在视图内部我需要推送一些其他视图控制器。为此,我尝试添加一个窗口作为该特定视图的子视图,然后将所需的视图控制器提供给该窗口的根视图控制器。它显示正确,但 rootviewcontroller 从屏幕 (0, 0) 点开始,而不是在窗口内。

在这张图片中,红色是视图控制器,灰色是原点 (0, 100) 的视图。以下是我尝试过的代码。

UIWindow *insideWindow = [[UIWindow alloc] initWithFrame: CGRectMake(0, 100, _windowView.frame.size.width, _windowView.frame.size.height)];

    insideWindow.backgroundColor = [UIColor yellowColor];
    insideWindow.windowLevel = UIWindowLevelNormal;
    insideWindow.hidden = NO;
    insideWindow.clipsToBounds = YES;
    insideWindow.bounds = _windowView.bounds;
    _windowView.clipsToBounds = YES;

    [_windowView addSubview: insideWindow];

SecondViewController *s = [SecondViewController new];
        s.view.bounds = CGRectMake(0, 100, _windowView.frame.size.width, _windowView.frame.size.height);

        insideWindow.rootViewController = [SecondViewController new];
         [insideWindow makeKeyAndVisible];

如何添加多个 UIWindows 不是重复的。在这里我可以添加多个窗口但问题是在窗口内部视图控制器设置不正确。

【问题讨论】:

Add multiple UIWindow的可能重复 @SaadChaudhry 这可能不是重复的问题。你能在问题中检查我的补偿吗? 可能重复并不意味着它是一个精确的单词到单词重复,但在其他问题或答案中,您可能会找到相关的解决方案。 您确定要添加 UIWindow 而不是简单地以模态方式推送的控制器,甚至是视图吗?我认为您的 UIWindow 方向错误;为什么你需要它是那样,而不是别的? @GilSand 感谢不同的方向。事实上,我在那里使用了一些第三方框架,我只能访问视图,在那个空间中我想推送几个视图控制器,这就是我选择这种方式的原因。但它没有按预期工作。 【参考方案1】:

我真的不知道你想要实现什么,但我们开始吧......

SecondViewController *s = [SecondViewController new];
s.view.bounds = CGRectMake(0, 100, _windowView.frame.size.width, _windowView.frame.size.height);
insideWindow.rootViewController = [SecondViewController new];

您基本上创建了一个 SecondViewController 的实例,然后设置边界(错误的想法),然后将 SecondViewController 的另一个实例分配为窗口 rootViewController。 视图的frame和bounds的区别:Bounds vs Frame

如果你想走那条路,那么:

SecondViewController *s = [SecondViewController new];
s.view.frame = CGRectMake(0, 100, _windowView.frame.size.width, _windowView.frame.size.height);
insideWindow.rootViewController = s;

为什么不将“SecondViewController”作为子级添加到具有“灰色”视图的控制器中,而不是添加窗口来显示视图控制器?

SecondViewController *s = [SecondViewController new];
[firstViewController addChildViewController:s];
s.view.frame = grayView.bounds; // or CGRectMake(...)
[grayView addSubview:s.view];
[s didMoveToViewController:firstViewController]; 

【讨论】:

以上是关于如何在屏幕的某个部分添加另一个 UIWindow的主要内容,如果未能解决你的问题,请参考以下文章

将 UIViewController 的视图调整为父 UIWindow 的边界

向添加到 UIWindow 的视图添加约束时,为啥无法设置自动布局约束?

如何在 Xcode 的另一个屏幕上完成某个操作时更改按钮的状态?

iOS开发UI篇—UIWindow简单介绍

如何在颤动中从另一个屏幕进行更改

86UIWindow简单介绍