尽管使用了bringSubviewToFront:方法,但子视图仍然不可见

时间:2013-10-30 07:39:01

标签: ios objective-c uiview

我在Interface Builder中创建了一个UIView,我们称之为viewFromIB,并在我的ViewController加载时将其隐藏起来。我正在创建另一个UIView,我们称之为modalViewType,通过代码并将其添加为self.navigationController.view的子视图:

UIView *modalViewType = [[UIView alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
modalViewType.opaque = NO;
modalViewType.backgroundColor = [[UIColor blackColor] colorWithAlphaComponent:0.6f];
[self.navigationController.view addSubview:modalViewType];

现在我取消隐藏viewFromIB,将viewFromIB添加为modalViewType的子视图,并使用viewFromIB方法将bringSubviewToFront:置于最前面。但viewFromIB虽然能够看到modalViewType但却无法看到。这是代码:

viewFromIB.hidden = NO;
viewFromIB.layer.masksToBounds = YES;
viewFromIB.center = CGPointMake(modalViewType.frame.size.width/2, modalViewType.frame.size.height/2);
[modalViewType addSubview:viewFromIB];
[modalViewType bringSubviewToFront:viewFromIB];  

仅供参考,这曾经在iOS6中运行良好,但现在用iOS7发脾气。如果需要任何其他信息,请告诉我。非常感谢。

更新:如果我不使用modalViewType UIView,只需在viewFromIB取消隐藏bringSubviewToFront:self.view它就可以了。只有在尝试添加modalViewType的子视图时才会出现问题。我的subView的框架似乎完全符合逻辑。

2 个答案:

答案 0 :(得分:0)

如果viewFromIB来自Interface Builder,它可能已经添加到某个超级视图中。我不确定addSubview:的已定义行为对于已作为子视图添加到另一个视图的视图是什么。

也许您可以先尝试拨打removeFromSuperview

另外,检查viewFromIB的大小 - 众所周知,iOS7会以意想不到的方式调整内容。

答案 1 :(得分:0)

我意识到这行代码:

viewFromIB.layer.masksToBounds = YES;

造成了麻烦。 masksToBounds方法指示是否将子图层剪切到图层的边界。据我所知,这不应该对UIView自身的可见性产生任何影响。我试图找到问题的根本原因但不能:( 无论如何,只是想分享删除这一行解决我的问题,现在我的子视图是可见的。仅供参考:在iOS6中使用此行从未对UIView的可见性产生任何不利影响。