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
的方法。此功能将导致帧发生变化,而与先前设置的帧无关。要更改该行为,您应该使用两个属性 horizontalAlignment
和 verticalAlignment
指定对齐方式。明确设置框架将导致其某些子层可能显示不正确。您可能应该在 设置文本之前将子视图添加到单元格 。这个顺序将导致已经解释过的 autoSetBadgeFrame
有一个有效的超级视图来对齐。
关于边框:如何指定边框?
我想在用户长按单元格时向我的 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
的方法。此功能将导致帧发生变化,而与先前设置的帧无关。要更改该行为,您应该使用两个属性 horizontalAlignment
和 verticalAlignment
指定对齐方式。明确设置框架将导致其某些子层可能显示不正确。您可能应该在 设置文本之前将子视图添加到单元格 。这个顺序将导致已经解释过的 autoSetBadgeFrame
有一个有效的超级视图来对齐。
关于边框:如何指定边框?