为啥插入子视图时会出现黑屏?

Posted

技术标签:

【中文标题】为啥插入子视图时会出现黑屏?【英文标题】:Why do I get a black screen when I insert a subview?为什么插入子视图时会出现黑屏? 【发布时间】:2013-12-31 13:58:36 【问题描述】:

使用下面的代码在我的 UIView 中插入一个子视图,我得到一个黑屏。谁能告诉我为什么?

CJGBoardLabels* whiteLabels = [[CJGBoardLabels alloc] initWithFrame:self.frame 
    andOrientation:@"white" 
    andOrigin:self.boardOrigin 
    andSquareSize:_squareSize 
    andHorizontalOffset:_horizontalOffset 
    andVerticalOffset:_verticalOffset];

[self insertSubview:whiteLabels aboveSubview:self];

我也得到了与以下行相同的结果:

[self insertSubview:whiteLabels belowSubview:self];

【问题讨论】:

检查 [self addSubView:whiteLabels]; 假设 self 是一个视图。 在创建 whiteLabels 之前放置一个断点并记录 self.frame。 self 是什么类? 嗯,我猜这可能是错误的称呼。 self.frameCGRect,因为我从父视图的 drawRect 方法调用 addSubview/insertSubview。这个地方叫错了吗? 您不应该在drawRect: 中添加子视图,不。此外,self 不能是self 的子视图,因此尝试基于该逻辑进行排序是有缺陷的。 好的,那么如果我想在父视图的drawRect完成后添加一个子视图,那么合适的地方在哪里呢? 【参考方案1】:

不要在drawRect: 方法中添加子视图。相反,使用实际的触发方法来添加子视图,并且最好让控制器添加子视图(而不是视图本身)。因此,请在控制器 viewDidLoad 或操作方法中调用 addSubview:

【讨论】:

以上是关于为啥插入子视图时会出现黑屏?的主要内容,如果未能解决你的问题,请参考以下文章

为啥使用故事板推送视图控制器显示黑屏

如何在ios中重新启动应用程序时删除黑屏

为啥 Windows 10 Enterprise Shell Launcher 出现黑屏?

求助啊为啥装centos7一点安装就黑屏

为啥navigationBar和view之间显示黑屏

为啥 glBindFramebuffer(GL_FRAMEBUFFER, 0) 会导致 cocos2D-iphone 出现黑屏?