UITableView 自定义部分标题出现在单元格下方
Posted
技术标签:
【中文标题】UITableView 自定义部分标题出现在单元格下方【英文标题】:UITableView custom section header appears below the cells 【发布时间】:2010-12-04 18:03:14 【问题描述】:我的 UITableView 中有一个自定义部分标题,但我无法弄清楚为什么它们出现在表格的 UITableViewCell 下方。看截图:
这是创建节标题的代码:
- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
NSString *sectionTitle = [self tableView:tableView titleForHeaderInSection:section];
if (sectionTitle == nil)
return nil;
return [LojaInfoHeaderView lojaInfoHeaderForSection:section withTitle:sectionTitle opened:[self sectionIsOpen:section] andDelegate:self];
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
return [LojaInfoHeaderView viewHeight];
当用户触摸节标题时,节的单元格被插入或删除:
- (void)lojaInfoHeader:(LojaInfoHeaderView *)lojaInfoHeader sectionDidOpen:(NSInteger)section
NSArray *indexPathsToInsert = [self indexPathsForSection:section];
[self setSection:section open:YES];
[_tableView insertRowsAtIndexPaths:indexPathsToInsert withRowAnimation:UITableViewRowAnimationTop];
- (void)lojaInfoHeader:(LojaInfoHeaderView *)lojaInfoHeader sectionDidClose:(NSInteger)section
NSArray *indexPathsToDelete = [self indexPathsForSection:section];
[self setSection:section open:NO];
[_tableView deleteRowsAtIndexPaths:indexPathsToDelete withRowAnimation:UITableViewRowAnimationTop];
如何使部分标题显示在单元格上方?如何解决?
更新以显示事物的创建方式
这些是我正在使用的类方法:
+ (CGFloat)viewHeight
return 44.0;
+ (LojaInfoHeaderView *)lojaInfoHeaderForSection:(NSInteger)section withTitle:(NSString *)title opened:(BOOL)isOpen andDelegate:(id<LojaInfoHeaderDelegate>)delegate
LojaInfoHeaderView *newHeader = [[[LojaInfoHeaderView alloc] initWithFrame:CGRectMake(0, 0, 320, 44)] autorelease];
newHeader.section = section;
[newHeader setTitle:title];
newHeader.delegate = delegate;
[newHeader setOpen:isOpen animated:NO];
return newHeader;
【问题讨论】:
您确定[LojaInfoHeaderView viewHeight]
实际上返回了正确的高度而不是返回 0?
是的,实现是 + (CGFloat)viewHeight return 44.0; // 44 是正确的高度。
离题:你是如何让导航栏和工具栏以及所有的栏按钮变成可爱的紫色的?你在 ios 4.x 下运行吗?谢谢。 (不确定获得回复的最佳方式 - 没有直接向您发布问题。)
这是导航栏的色调
谢谢。这会覆盖“完成”按钮和其他获得“特殊”水蓝色的按钮吗?
【参考方案1】:
我发现了问题。我正在使用 alpha 设置 backgroundColor(是的,我不敢相信我错过了这个)。
initWithFrame 中的代码错误:
self.backgroundColor = [UIColor colorWithRed:0 green:0 blue:0 alpha:0.1];
正确代码:
self.backgroundColor = [UIColor colorWithRed:0.89 green:0.89 blue:0.89 alpha:1.0];
【讨论】:
好吧,这个可能很难猜到 :)【参考方案2】:尝试将整个表格样式更改为分组而不是普通样式。或者将剖面视图更改为不透明。无论设计要求是什么。
【讨论】:
在 initWithFrame 中设置 self.opaque = YES 没有解决。至于使用分组样式,我不明白为什么这是一个解决方案,因为设计很重要,而且它使节标题不粘,这不是我需要的。 你可以尝试将其设置为表头视图,而不是节头视图,可能会解决它。 可能是,但我有不止一个部分,在屏幕截图中我只显示一个。但是这个问题发生在所有部分。 我看到你的函数是类函数,而不是类的实例,你能发布更多关于如何创建节标题的代码吗?这将有助于更好地理解创建过程 谢谢,现在我明白为什么 self.opaque = YES 不起作用了。因为您只能在类的实例中使用 self,而不能在类函数本身中使用。尝试在您在 viewForHeaderInSection 函数中创建的 LojaInfoHeaderView 类的实例上调用 .opaque = YES,即在您的部分标题类上添加一个指针,例如 LojaInfoHeaderView *header = [LojaInfoHeaderView lojaInfoHeaderForSection...]; header.opaque = YES;返回标头;看看这是否有帮助。以上是关于UITableView 自定义部分标题出现在单元格下方的主要内容,如果未能解决你的问题,请参考以下文章
从多节 UITableView 中的自定义静态单元格中检索标签文本