【问题标题】:Bring subview to front将子视图置于前面
【发布时间】:2016-09-02 06:27:07
【问题描述】:

我遇到了一个问题,我想将我添加到UICollectionViewCell 的徽章通知视图带到前面。我正在使用cell.layer.borderColor = [[UIColor redColor]CGColor]; UICollectionViewCell 添加边框。但是当添加边框时,它会出现在徽章视图的顶部。

添加边框后:

我在子类UICollectionViewCell 中使用[self addSubview:self.badge]; 将徽章视图添加到单元格中

我试过了,[self bringSubviewToFront:self.badge];self.badge.layer.zPosition = 1; 但没有帮助。我在 SO 上的类似帖子中找到了这些解决方案,但我认为我做错了什么。如果有人能指出这一点,我会很高兴。谢谢。

编辑 我根据建议做了一点改动,做了[self.contentView addSubview:self.badge];而不是[self addSubview:self.badge];。当我调试视图并检查所有视图层时,它确实在边框顶部显示了徽章,但在模拟器中并非如此。

【问题讨论】:

  • 这是因为您将徽章添加到您正在应用边框的同一个视图中,只需添加另一个您应用边框的视图而不是在主视图中。
  • 但是在这种情况下,bringSubviewToFront 应该仍然可以工作,对吧?
  • 试试setcell.layer.borderWidth ,也许这对你的边框有帮助。
  • 使用bringSubviewToFront ,您必须指向正确的视图。我认为在这种情况下,它应该是单元格的视图。

标签: ios objective-c uiview uicollectionview uicollectionviewcell


【解决方案1】:

正如@iphonic 所说,您无法使用相同的视图来绘制边框并包含徽章。

尝试设置这些视图层次结构:

Cell
   |- ContentView
      |- Main View (Apply border here)
         |- All you content
      |- Badge

【讨论】:

    【解决方案2】:

    您可以为您的自定义UICollectionViewCell 的边框创建一个特定的子视图,因此当您需要使其出现时,您可以轻松地将徽章放在前面。

    以编程方式可能是这样的(在您的自定义 UICollectionViewCell 中)

    UIView* border = [[UIView alloc] initWithFrame:cell.frame];
    border.tag = 1001;
    border.layer.borderColor = [[UIColor redColor]CGColor];
    [self addSubview:border];
    

    当您需要预先添加和显示徽章时

    [self addSubview:self.badge];
    [self bringSubviewToFront:[self viewWithTag:1001]];
    [self bringSubviewToFront:self.badge]; 
    

    【讨论】:

      【解决方案3】:

      为徽章使用单独的 CALayer。您似乎在同一层中同时绘制了徽章和边框,因此合并了两个图像。

      【讨论】:

      • 纯粹出于兴趣,将badgeView的backgroundColor设置为纯色会发生什么?
      • 边框出现在徽章上,我不知道为什么会发生这种情况,因为在“查看调试”中,徽章明显超出了边框。
      • 如果强行使用不同的CGContext来绘制呢?根本不需要,但可以帮助查明发生了什么
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多