UICollectionViewCell 添加徽章

Chl*_*bta 3 objective-c ios uicollectionview

当用户长按单元格时,我想将徽章添加到我的 UICollectionViewCell 中。这是我的代码:

- (void)activateDeletionMode:(UILongPressGestureRecognizer *)gesture
{
    if (gesture.state == UIGestureRecognizerStateBegan)
    {      
        NSIndexPath *indexPath = [_favoriteCollection indexPathForItemAtPoint:[gesture locationInView:_favoriteCollection]];
        UICollectionViewCell *cell = [_favoriteCollection cellForItemAtIndexPath:indexPath];
       //M13BadgeView *badgeView = [[M13BadgeView alloc] initWithFrame:CGRectMake(-12,-12, 24.0, 24.0)];
        M13BadgeView *badgeView = [[M13BadgeView alloc] initWithFrame:CGRectMake(200,200, 24.0, 24.0)];
        badgeView.text = @"1";
        [cell addSubview:badgeView];
        [cell bringSubviewToFront:badgeView];

    }
}
Run Code Online (Sandbox Code Playgroud)

这就是我的单元格在长按后的样子: 在此输入图像描述

正如你所看到的,我牢房中的红色小硬币是徽章,即使我改变框架,它也永远不会改变她的位置,例如:

//M13BadgeView *badgeView = [[M13BadgeView alloc] initWithFrame:CGRectMake(-12,-12, 24.0, 24.0)];
M13BadgeView *badgeView = [[M13BadgeView alloc] initWithFrame:CGRectMake(200,200, 24.0, 24.0)];
Run Code Online (Sandbox Code Playgroud)

我也尝试过使用[cell bringSubviewToFront:badgeView];or[_favoriteCollection bringSubviewToFront:badgeView];但没有成功。

**注意我正在使用这个库作为徽章

更新感谢卢克的回答,将 maskToBounds 设置为 false 现在我的徽章出现了,但我遇到了另一个小问题,单元格的边框显示在徽章中,请检查: 在此输入图像描述

luk*_*302 5

为了使徽章正确显示,您必须确保单元格不会将其内容剪切到其边界。因此您需要将该属性设置clipsToBoundsfalse。这将导致徽章在其超级视图框架之外渲染。

查看您使用的库的代码后,我发现在更改text徽章的属性后autoSetBadgeFrame,会调用一个名为的方法。此功能将导致框架发生变化,而不考虑先前设置的框架。horizontalAlignment要更改该行为,您应该使用和两个属性指定对齐方式verticalAlignment。明确设置框架将导致其某些子图层可能无法正确显示。您可能应该在设置文本之前将子视图添加到单元格中。这个顺序将导致已经解释的autoSetBadgeFrame有一个有效的超级视图来对齐。

关于边界:如何指定边界?