UICollectionViewCell 添加徽章

UICollectionViewCell adding badge

我想在用户长按单元格时向我的 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];

    }
}

这就是我的手机在长按后的样子:

如您所见,我手机中的红色小硬币就是徽章,即使我改变框架它也永远不会改变她的位置,它看起来总是那样,例如:

//M13BadgeView *badgeView = [[M13BadgeView alloc] initWithFrame:CGRectMake(-12,-12, 24.0, 24.0)];
M13BadgeView *badgeView = [[M13BadgeView alloc] initWithFrame:CGRectMake(200,200, 24.0, 24.0)];

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

**注意我使用 this library 作为徽章

更新 感谢 luke answer 将 maskToBounds 设置为 false,现在我的徽章出现了,但我遇到了另一个小问题,徽章中显示了单元格的边框检查这个:

使用:

[[cell contentView] addSubview:badgeView];

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

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

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