【问题标题】: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完成后添加一个子视图,那么合适的地方在哪里呢?

标签: ios user-interface uiview subview


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2012-11-01
    • 2010-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-28
    相关资源
    最近更新 更多