容器视图覆盖了我的图像视图

时间:2014-05-31 22:12:27

标签: ios uiimageview uicontainerview

我有一个容器视图,默认情况下应该被imageView隐藏,启动时图像应该覆盖容器。但是,即使IB中的分层正确并且在容器之后更新了imageView,容器仍然显示在图像前面。有没有办法阻止这种情况发生?

以下是IB的概要:

enter image description here

我第一次发布这个时,我有了图像视图,以及主视图中视图上的三个按钮。但从那时起,我已将其改为如何显示。

鉴于我有每个子视图的出口如下:Container View-Container,Image View-backgroundImage,Buttons-item1,item2,item3。

以下是我尝试的一系列事项:

  1. [self.view sendSubviewToBack: _Container];
  2. [self.view bringSubviewToFront: _item1];
  3. [self.view bringSubviewToFront: _item2];
  4. [self.view bringSubviewToFront: _item3];
  5. [self.view bringSubviewToFront: _backgroundImage];
  6. 我还试图从视图控制器的可见坐标移出容器视图,但这也不起作用。

    此处还有我对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];
    

    }

1 个答案:

答案 0 :(得分:0)

尽管问题的标题,麻烦的观点是容器视图。它留在你放的地方。麻烦的视图是一个不同的视图,一个额外的包含的视图,它不会出现在故事​​板屏幕截图中 - 因为嵌入了segue或其他形式的父级 - 涉及子视图控制器遏制。

可能是你使用了嵌入segue而没有真正理解它是什么。我注意到你有一个容器视图容器视图控制器一些其他视图控制器。可能是你混淆了自己。

一种可能的起始解决方案可能是删除(注释掉)这一行:

[self.containerViewController performSegueWithIdentifier:@"embedConverter" sender:nil];
  • 没必要。您已经从容器视图中嵌入了segue,这将自动执行。如果容器视图没有自动加载正确的视图控制器及其视图,那么您在故事板中设置错误(可能包含太多的遏制级别)。

  • 这是父子视图控制器关系。这意味着子视图控制器将会出现,它的视图(一个全新的视图)将被注入到您的界面中。这就解释了为什么你无法控制视图的前后位置!你可以搞乱"容器视图"所有你喜欢的,但不是你所看到的导致问题的视图 - 引起麻烦的视图是 new 视图。因此,您将图像视图置于前面,然后将这个新视图注入所有内容

然而,我会更进一步。通过使用嵌入segue,您已放弃对注入视图的分层顺序的所有控制。我建议你问自己两个问题:

  1. 我真的需要一个父子视图控制器关系吗?在许多情况下,答案是否定的。例如,假设您想要在界面中使用一个小表视图。有些人认为这需要一个表视图控制器和一个嵌入segue。但事实并非如此;表视图控制器永远不是必需的,您可以使用

  2. 完美地管理表格
  3. 如果对(1)的答案是肯定的,那么我会更好地管理这种关系 - 以及生成的注入视图 - 手动吗?

  4. 如果您执行了(2),则您不需要容器视图,并且您可以完全控制注入视图放置到界面的位置和方式。