Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/112.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 将子视图置于前面_Ios_Objective C_Uiview_Uicollectionview_Uicollectionviewcell - Fatal编程技术网

Ios 将子视图置于前面

Ios 将子视图置于前面,ios,objective-c,uiview,uicollectionview,uicollectionviewcell,Ios,Objective C,Uiview,Uicollectionview,Uicollectionviewcell,我遇到一个问题,我想将我添加到UICollectionViewCell的徽章通知视图放到前面。我正在使用cell.layer.borderColor=[[UIColor redColor]CGColor]向UICollectionViewCell添加边框; 。但添加边框后,它会显示在“徽章”视图的顶部 添加边框后: 我使用,[self addSubview:self.badge]将badge视图添加到单元格中; 在类的哪个子类中UICollectionViewCell UIView* bor

我遇到一个问题,我想将我添加到
UICollectionViewCell
的徽章通知视图放到前面。我正在使用
cell.layer.borderColor=[[UIColor redColor]CGColor]向
UICollectionViewCell
添加边框;
。但添加边框后,它会显示在“徽章”视图的顶部

添加边框后:

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

UIView* border = [[UIView alloc] initWithFrame:cell.frame];
border.tag = 1001;
border.layer.borderColor = [[UIColor redColor]CGColor];
[self addSubview:border];
我试过,
[self-bringsubview-tofront:self.badge]
self.badge.layer.zPosition=1但它没有帮助。我在类似的帖子上找到了这些解决方案,但我认为我做错了什么。如果有人能指出这一点,我会很高兴。多谢各位

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

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

尝试设置以下视图层次结构:

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

您可以为自定义的
UICollectionViewCell
边框创建特定的子视图,因此当需要显示时,您可以轻松地将徽章放在前面

从编程角度来看,它可能是这样的(在您的自定义
UICollectionViewCell
中)

当你需要在前面添加和显示徽章时

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

为徽章使用单独的CALayer。看起来您在同一层中绘制了徽章和边框,因此合并了两幅图像。

因为您要将徽章添加到应用边框的同一视图中,只需添加另一个应用边框的视图,而不在主视图中。但在这种情况下,bringSubviewToFront仍应工作,对吗?请尝试设置
cell.layer.borderWidth
,也许这可以帮助您处理边框。使用
将Subview带到Front
时,您必须指向右视图。我认为在这种情况下,应该是单元格视图。出于纯粹的兴趣,当您将badgeView的背景色设置为纯色时会发生什么情况?边框显示在徽章上方,我不知道为什么会发生这种情况,因为在“查看调试”中,徽章明显超出了边界。如果您强制使用不同的CGContext进行绘制,会怎么样?应该没有必要,但可以帮助确定发生了什么