我想以编程方式显示节标题。这就是我所拥有的。
- (void)refreshSectionHeader
{
[self.tableView beginUpdates];
[self.tableView endUpdates];
}
-
- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{
if ([self shouldShowSectionHeader]) {
UILabel *label = [[UILabel alloc] init];
label.backgroundColor = [UIColor whiteColor];
label.font = [label.font fontWithSize:15];
label.text = @"It'sa me! Mario!";
label.textAlignment = NSTextAlignmentCenter;
return label;
} else {
return nil;
}
}
-
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
if ([self shouldShowSectionHeader]) {
return 20;
} else {
return 0;
}
}
它几乎可以工作。当我拨打refreshSectionHeader
时,标题会正确显示,但不会显示任何文字(标签)。只要我滚动tableView,就会出现文本。显然,我希望文本立即出现。任何想法如何解决这个问题?
此外,当shouldShowSectionHeader
返回NO
时,标题会正确消失。
答案 0 :(得分:1)
好的,我找到了解决这个问题的3种方法。他们在这里。
您不必实施所有这三项。这3个中只有1个就足够了。
解决方案1是最好的imo。
1 - 在viewForHeaderInSection
中,确保使用正确的框架初始化标签。另外,将它添加到UIView。返回UIView而不是UILabel。
- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{
if ([self shouldShowSectionHeader]) {
UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 320, 20)];
label.backgroundColor = [UIColor whiteColor];
label.font = [label.font fontWithSize:15];
label.text = @"All your base are belong to us!";
label.textAlignment = NSTextAlignmentCenter;
UIView *sectionHeader = [[UIView alloc] init];
[sectionHeader addSubview:label];
return sectionHeader;
} else {
return nil;
}
}
2 - 使用
- (void)refreshSectionHeader
{
[self.tableView reloadSections:[[NSIndexSet alloc] initWithIndex:0] withRowAnimation:UITableViewRowAnimationFade];
}
而不是
- (void)refreshSectionHeader
{
[self.tableView beginUpdates];
[self.tableView endUpdates];
}
3 - 以编程方式滚动tableview
- (void)refreshTableViewHeader
{
[self.tableView beginUpdates];
CGPoint contentOffset = self.tableView.contentOffset;
contentOffset.y++;
[self.tableView setContentOffset:contentOffset animated:NO];
contentOffset.y--;
[self.tableView setContentOffset:contentOffset animated:NO];
[self.tableView endUpdates];
}
答案 1 :(得分:0)
为shouldShowTableViewHeader
-(void)setShouldShowTableViewHeader:(BOOL)shouldShow
{
_shouldShowTableViewHeader = shouldShow;
[self refreshTableViewHeader];
}
请尽量为您的标签提供尺寸
UILabel *label = [[UILabel alloc] init];
label.backgroundColor = [UIColor whiteColor];
label.font = [label.font fontWithSize:15];
label.text = @"It'sa me! Mario!";
label.textAlignment = NSTextAlignmentCenter;
[label sizeToFit];
答案 2 :(得分:0)
您是否尝试过使用[self.tableView reloadData]
代替
[self.tableView beginUpdates];
[self.tableView endUpdates];