在TDBadgedCell中更改徽章的位置

时间:2014-08-26 12:59:00

标签: ios objective-c uitableview

我是Objective-C开发的新手,目前正在开发我的第一个iOS应用程序。 我想在UITableView单元格中显示徽章符号。为此,我找到了TDBadgedCell Class on GitHub。 我从TDBadgedCell派生了我自己的UITableViewCell类,基本上它工作正常。

我现在的问题是,我想改变徽章在我的细胞内的位置。我认为这不是api直接支持的,但我试图找到一种方法来做到这一点。 我已经使用了单元格的徽章属性,这是一个UIView对象,但它不起作用:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    MCLThread *thread = self.threads[indexPath.row];
    MCLThreadTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"ThreadCell" forIndexPath:indexPath];

    cell.badgeString = thread.answerCount;

    NSLog(@"Before: %f", cell.badge.frame.origin.y);

    // Try to move badge
    CGRect badgeFrame = cell.badge.frame;
    badgeFrame.origin = CGPointMake(badgeFrame.origin.x, 35); // y = 35
    cell.badge.frame = badgeFrame;

    NSLog(@"After: %f", cell.badge.frame.origin.y);    

    return cell;
}

日志输出显示y坐标已更改,但徽章仍在正在运行的应用中的相同位置。

2014-08-26 14:50:25.494 mclient[66574:60b] Before: 21.000000
2014-08-26 14:50:25.549 mclient[66574:60b] After: 35.000000

同样的方法对我来说是动态设置同一个单元格中某些UILabel对象的位置(我已从上面的代码中删除了它)。

有人可以告诉我这里的区别是什么,或者实现我的意图的正确方法是什么?

非常感谢!

1 个答案:

答案 0 :(得分:1)

抱歉,我没有正确阅读你的回答,这是我的建议 编辑徽章框架 在TDBadgedCell.m

- (void) layoutSubviews
{
    [super layoutSubviews];

    if(self.badgeString)
    {
    [[self contentView] addSubview:[self badge]];

    // Force badges to hide on edit.
    if(self.editing)
        [self.badge setHidden:YES];
    else
        [self.badge setHidden:NO];

    // Calculate the size of the bage from the badge string
    UIFont *font = self.badge.boldFont ? [UIFont boldSystemFontOfSize:self.badge.fontSize] : [UIFont systemFontOfSize:self.badge.fontSize];

    CGSize badgeSize;
    if ([[[UIDevice currentDevice] systemVersion] compare:@"7.0" options:NSNumericSearch] != NSOrderedAscending) {
        badgeSize = [self.badgeString sizeWithAttributes:@{ NSFontAttributeName:font }];
    } else {
        badgeSize = [self.badgeString sizeWithFont:font];
    }

编辑本部分

//HERE STITCH EDIT ME PLEASE

CGRect badgeframe = CGRectMake(self.contentView.frame.size.width - (badgeSize.width + 13 + self.badgeRightOffset),
                                   (CGFloat)round((self.contentView.frame.size.height - (badgeSize.height + (50/badgeSize.height))) / 2),
                                   badgeSize.width + 13, badgeSize.height + (50/badgeSize.height));