У меня есть табличный вид с обычным подключенным материалом, проблема в UITableViewHeaderFooterView, когда они появляются, у них есть необычный кадр. Но если я прокручу вниз и вернусь назад (после их повторного использования), они выглядят прекрасно. Вот соответствующий код.Ошибка UITableViewHeaderFooterView
РЕДАКТИРОВАТЬ: ячейки таблицы, с другой стороны, выглядят прекрасно.
Журнал для headerView в этой строке FAQSectionHeaderView * headerView = [self.tableView dequeueReusableHeaderFooterViewWithIdentifier: @ "HeaderView"]; показывает это:
2013-11-01 15:16:04.716 FAQDetail[27576:70b] header View <FAQSectionHeaderView: 0x8b582e0; baseClass = UITableViewHeaderFooterView; frame = (0 0; 0 0); text = ''; layer = <CALayer: 0x8b58420>> at Section 0
2013-11-01 15:16:04.718 FAQDetail[27576:70b] header View <FAQSectionHeaderView: 0xa83edc0; baseClass = UITableViewHeaderFooterView; frame = (0 0; 0 0); text = ''; layer = <CALayer: 0xa83ee80>> at Section 1
2013-11-01 15:16:04.719 FAQDetail[27576:70b] header View <FAQSectionHeaderView: 0x8c2f8e0; baseClass = UITableViewHeaderFooterView; frame = (0 0; 0 0); text = ''; layer = <CALayer: 0x8c2c370>> at Section 2
2013-11-01 15:16:04.719 FAQDetail[27576:70b] header View <FAQSectionHeaderView: 0x8a3f7a0; baseClass = UITableViewHeaderFooterView; frame = (0 0; 0 0); text = ''; layer = <CALayer: 0x8a3f860>> at Section 3
2013-11-01 15:16:04.720 FAQDetail[27576:70b] header View <FAQSectionHeaderView: 0x8c70dc0; baseClass = UITableViewHeaderFooterView; frame = (0 0; 0 0); text = ''; layer = <CALayer: 0x8c6f0b0>> at Section 4
в ViewController.m
- (void)viewDidLoad
{
[super viewDidLoad];
[self.tableView registerClass:[FAQSectionHeaderView class] forHeaderFooterViewReuseIdentifier:@"HeaderView"];
[self.tableView registerClass:[FAQDetailCell class] forCellReuseIdentifier:@"Cell"];
}
- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section{
FAQSectionHeaderView *headerView = [self.tableView dequeueReusableHeaderFooterViewWithIdentifier:@"HeaderView"];
[headerView setupWithQuestion:[self.sectionTitleArray objectAtIndex:section]];
return headerView;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
if (self.selectedSection == indexPath.section) {
FAQDetailCell *cell = [self.tableView dequeueReusableCellWithIdentifier:@"Cell"];
[cell initWithAnswer:[self.rowsTitleArray objectAtIndex:indexPath.section]];
return cell;
} else
return nil;
}
в FAQSectionHeaderView.m (подкласс UITableViewHeaderFooterView)
-(void)setupWithQuestion: (NSString *)question{
[self.questionLabel removeFromSuperview];
CGSize expectedLabelHeight = [FAQSectionHeaderView sizeForQuestion:question];
self.questionLabel = [[UILabel alloc] init];
self.questionLabel.frame = CGRectMake(10, 10, self.frame.size.width-20, expectedLabelHeight.height);
NSMutableAttributedString *q = [[NSMutableAttributedString alloc] initWithString:[@"Q " stringByAppendingString:question]];
[q addAttribute:NSForegroundColorAttributeName value:[UIColor redColor] range:NSMakeRange(0, 2)];
[q addAttribute:NSFontAttributeName value:[UIFont systemFontOfSize:14] range:NSMakeRange(0, question.length)];
[q addAttribute:NSFontAttributeName value:[UIFont systemFontOfSize:17] range:NSMakeRange(0, 2)];
[self.questionLabel setAttributedText:q];
self.questionLabel.font = [UIFont systemFontOfSize:17];
self.questionLabel.numberOfLines = 0;
[self addSubview:self.questionLabel];
self.frame = CGRectMake(0, 0, self.frame.size.width, self.questionLabel.frame.size.height+20);
}
-(void)prepareForReuse{
[self.questionLabel removeFromSuperview];
}
Вот как он появляется в начале и после повторного использования клеток пинков в .
спасибо за то, что заглянул в него, но я не инициализирую объект в вызове initWithQuestion, он больше похож на setupWithQuestion: (реализация метода включена выше), я не делаю там никакой активности init. Вы столкнулись с проблемой, что он возвращает объект с фреймом CGRectZero? – ManicMonkOnMac