第二次向窗口添加视图不可见

时间:2015-05-19 13:01:23

标签: ios objective-c autolayout

我有一个视图(View1),它最初布置在屏幕的右侧,左侧有一个桌面视图,两个都固定在内容视图的外边缘。我正在尝试支持动画查看1全屏,同时还覆盖其上的另一个视图,以提供一些控件,如退出全屏。

我能够以编程方式存储与View1关联的内容视图的约束和框架,将View1添加到Window的视图,然后在其上添加叠加视图而不会出现问题。我还能够支持退出全屏,删除覆盖视图,将View1添加回原始内容视图,并将存储的View1框架和约束恢复到内容视图。这很好用。但是,尝试第二次全屏显示不起作用。 View1不可见,叠加视图仅部分可见。

这些视图都可以随时打印出来,包括viewDidLayoutSubviews。在布置完所有内容后检查视图,我看到View1具有零高度,并且叠加视图折叠为仅适合其子视图。

我怀疑在播放时会出现自动布局,并希望我在退出全屏时错过了一些东西。任何帮助将不胜感激。

编辑:我移动全屏视图的代码是:

// View1
for (NSLayoutConstraint *constraint in self.contentView.constraints) {
    if (constraint.firstItem == self.imageView || constraint.secondItem == self.imageView) {
        [self.nonFullscreenConstraints addObject:constraint];
    }
}
self.nonFullscreenFrame = self.imageView.frame;
[self.view.window addSubview:self.imageView];
[self.view.window bringSubviewToFront:self.imageView];
self.imageView.frame = self.view.window.frame;

// Overlay
[self.view.window addSubview:self.fullscreenOverlayView];
[self.view.window bringSubviewToFront:self.fullscreenOverlayView];
self.fullscreenOverlayView.frame = self.view.window.frame;

我退出全屏的代码是:

// View1
self.imageView.frame = self.nonFullscreenFrame;
self.nonFullscreenFrame = CGRectZero;
[self.contentView addSubview:self.imageView];
for (NSLayoutConstraint *constraint in self.nonFullscreenConstraints) {
    [self.contentView addConstraint:constraint];
}
[self.nonFullscreenConstraints removeAllObjects];

// Overlay
[self.fullscreenOverlayView removeFromSuperview];

1 个答案:

答案 0 :(得分:0)

确定问题所在。我没有将叠加视图添加回原始父级并以与View1相同的方式恢复约束。完成后,我可以按预期弹出全屏幕。