我有一个容器视图,默认情况下应该被imageView隐藏,启动时图像应该覆盖容器。但是,即使IB中的分层正确并且在容器之后更新了imageView,容器仍然显示在图像前面。有没有办法阻止这种情况发生?
以下是IB的概要:
我第一次发布这个时,我有了图像视图,以及主视图中视图上的三个按钮。但从那时起,我已将其改为如何显示。
鉴于我有每个子视图的出口如下:Container View-Container,Image View-backgroundImage,Buttons-item1,item2,item3。
以下是我尝试的一系列事项:
[self.view sendSubviewToBack: _Container];
[self.view bringSubviewToFront: _item1];
[self.view bringSubviewToFront: _item2];
[self.view bringSubviewToFront: _item3];
[self.view bringSubviewToFront: _backgroundImage];
我还试图从视图控制器的可见坐标移出容器视图,但这也不起作用。
此处还有我对View Controller的viewDidAppear方法:
首先我设置容器视图,然后为按钮和图像视图做一些初始设置。在这个方法的底部是我一直在放置子视图命令。 希望这会有所帮助。
-(void) viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
[self.containerViewController performSegueWithIdentifier:@"embedConverter" sender:nil];
_item1.center = self.view.center;
_item2.center = self.view.center;
_item3.center = self.view.center;
_item1.layer.anchorPoint = CGPointMake(.5,1.5);
_item3.layer.anchorPoint = CGPointMake(.5,-.5);
CGAffineTransform move1 = CGAffineTransformMakeTranslation(0, -15);
CGAffineTransform move3 = CGAffineTransformMakeTranslation(0, 15);
_item1.transform = move1;
_item3.transform = move3;
[_item1 setTranslatesAutoresizingMaskIntoConstraints:YES];
[_item2 setTranslatesAutoresizingMaskIntoConstraints:YES];
[_item3 setTranslatesAutoresizingMaskIntoConstraints:YES];
CGAffineTransform scale = CGAffineTransformMakeScale(1.25, 1.25);
_item1.transform = scale;
_item2.transform = scale;
_item3.transform = scale;
_item1.alpha = menuAlpha;
_item2.alpha = menuAlpha;
_item3.alpha = menuAlpha;
_menuBackground.image = [self applyBlurWithRadius:10
tintColor:[UIColor colorWithWhite:.3 alpha:.7]
saturationDeltaFactor:1
maskImage:nil];
}
答案 0 :(得分:0)
尽管问题的标题,麻烦的观点是不容器视图。它留在你放的地方。麻烦的视图是一个不同的视图,一个额外的包含的视图,它不会出现在故事板屏幕截图中 - 因为嵌入了segue或其他形式的父级 - 涉及子视图控制器遏制。
可能是你使用了嵌入segue而没有真正理解它是什么。我注意到你有一个容器视图和容器视图控制器和一些其他视图控制器。可能是你混淆了自己。
一种可能的起始解决方案可能是删除(注释掉)这一行:
[self.containerViewController performSegueWithIdentifier:@"embedConverter" sender:nil];
没必要。您已经从容器视图中嵌入了segue,这将自动执行。如果容器视图没有自动加载正确的视图控制器及其视图,那么您在故事板中设置错误(可能包含太多的遏制级别)。
这是父子视图控制器关系。这意味着子视图控制器将会出现,它的视图(一个全新的视图)将被注入到您的界面中。这就解释了为什么你无法控制视图的前后位置!你可以搞乱"容器视图"所有你喜欢的,但不是你所看到的导致问题的视图 - 引起麻烦的视图是 new 视图。因此,您将图像视图置于前面,然后将这个新视图注入所有内容。
然而,我会更进一步。通过使用嵌入segue,您已放弃对注入视图的分层顺序的所有控制。我建议你问自己两个问题:
我真的需要一个父子视图控制器关系吗?在许多情况下,答案是否定的。例如,假设您想要在界面中使用一个小表视图。有些人认为这需要一个表视图控制器和一个嵌入segue。但事实并非如此;表视图控制器永远不是必需的,您可以使用
如果对(1)的答案是肯定的,那么我会更好地管理这种关系 - 以及生成的注入视图 - 手动吗?
如果您执行了(2),则您不需要容器视图,并且您可以完全控制注入视图放置到界面的位置和方式。