我是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对象的位置(我已从上面的代码中删除了它)。
有人可以告诉我这里的区别是什么,或者实现我的意图的正确方法是什么?
非常感谢!
答案 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));