为啥插入子视图时会出现黑屏?
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.frame
是 CGRect
,因为我从父视图的 drawRect
方法调用 addSubview/insertSubview。这个地方叫错了吗?
您不应该在drawRect:
中添加子视图,不。此外,self
不能是self
的子视图,因此尝试基于该逻辑进行排序是有缺陷的。
好的,那么如果我想在父视图的drawRect完成后添加一个子视图,那么合适的地方在哪里呢?
【参考方案1】:
不要在drawRect:
方法中添加子视图。相反,使用实际的触发方法来添加子视图,并且最好让控制器添加子视图(而不是视图本身)。因此,请在控制器 viewDidLoad
或操作方法中调用 addSubview:
。
【讨论】:
以上是关于为啥插入子视图时会出现黑屏?的主要内容,如果未能解决你的问题,请参考以下文章
为啥 Windows 10 Enterprise Shell Launcher 出现黑屏?
为啥 glBindFramebuffer(GL_FRAMEBUFFER, 0) 会导致 cocos2D-iphone 出现黑屏?