【问题标题】:subView not visible despite using bringSubviewToFront: method尽管使用了 bringSubviewToFront: 方法,但 subView 不可见
【发布时间】:2013-10-30 07:39:00
【问题描述】:

我在 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 的子视图,并使用bringSubviewToFront: 方法将viewFromIB 置于前面。但是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 并在 self.view 上取消隐藏 viewFromIBbringSubviewToFront: 它工作正常。只有在尝试添加modalViewType 的子视图时才会出现问题。我的 subView 的框架似乎完全合乎逻辑。

【问题讨论】:

  • 试试,self.view bringSubviewToFront:viewFromIB];
  • @karthika 我已经尝试过了。它不起作用,因为[modalViewType addSubview:viewFromIB]; 已将 viewFromIB 的超级视图更改为 modalViewType

标签: ios objective-c uiview


【解决方案1】:

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

也许您可以先尝试致电removeFromSuperview

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

【讨论】:

  • addSubview: 方法在使接收者成为新的超级视图之前删除以前的超级视图。我检查了viewFromIB 的大小,似乎没问题。
  • 静止。也许当您设置center 时,它实际上是在前一个超级视图上执行此操作。删除后,新的框架可能没有定义。
  • 是的,中心对齐的代码行似乎没有用。我已经删除它但徒劳无功。如果我不添加viewFromIB 作为modalViewType 的子视图,那么我可以在背景中看到viewFromIB(作为self.view 的子视图),但是一旦我将其添加为modalViewType 的子视图,它就会消失. addSubView: 方法运行良好,因为当我看到 modalViewType 的子视图(使用 po modalViewType.subviews)时,viewFromIB UIView 也存在于右侧 Frame
  • po modalViewType.subviews 为您的viewFromIB 报告什么框架?
  • 这是整个打印输出:(> )
【解决方案2】:

我意识到这行代码:

viewFromIB.layer.masksToBounds = YES;

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-27
    • 2014-02-24
    • 2016-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多