编辑:使一切更清晰,提供日志,为方法添加更多细节。
我在tableview:cellForRowAtIndexPath:
[self.menuTable registerNib:[UINib nibWithNibName:@"CustomCellNotif" bundle:nil] forCellReuseIdentifier:@"notifCell"];
UITableViewCell *cell = [[UITableViewCell alloc] init];
cell.selectionStyle = UITableViewCellSelectionStyleNone;
cell = [tableView dequeueReusableCellWithIdentifier:@"notifCell"];
cell.selectionStyle = UITableViewCellSelectionStyleDefault;
if (loaded == 2) {
DLOG(@"loaded 2");
cell.textLabel.lineBreakMode = NSLineBreakByWordWrapping;
cell.textLabel.numberOfLines = 2;
cell.textLabel.font = [UIFont systemFontOfSize:cell.bounds.size.height*30/100];
cell.textLabel.text = @"some text";
cell.detailTextLabel.font = [UIFont italicSystemFontOfSize:cell.bounds.size.height*20/100];
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"dd/MM/yyyy HH:mm"];
NSDate *date = [NSDate dateWithTimeIntervalSince1970:(mydate / 1000)];
NSString *formattedDateString = [dateFormatter stringFromDate:date];
cell.detailTextLabel.text = formattedDateString;
} else if (loaded == 4) {
DLOG(@"loaded 4");
cell.textLabel.lineBreakMode = NSLineBreakByWordWrapping;
cell.textLabel.numberOfLines = 2;
cell.textLabel.font = [UIFont systemFontOfSize:cell.bounds.size.height*30/100];
cell.textLabel.text = @"Loaded 4";
cell.detailTextLabel.font = [UIFont italicSystemFontOfSize:cell.bounds.size.height*20/100];
cell.detailTextLabel.text = @"Loaded 4";
} else {
DLOG(@"loaded 0");
cell.textLabel.lineBreakMode = NSLineBreakByWordWrapping;
cell.textLabel.numberOfLines = 2;
cell.textLabel.font = [UIFont systemFontOfSize:cell.bounds.size.height*30/100];
cell.textLabel.text = @"NOthing";
cell.detailTextLabel.text = @"";
}
我正在使用包含此内容的另一种方法获取数据:
/* request is here */
if (error != nil) {
DLOG(@"error :%@",error);
loaded = 4;
[self.tableView reloadData];
} else {
DLOG(@"Success! Response from the back");
/* ... fetching data */
}
if ([self.listResult count] == 0) {
loaded = 0;
} else {
loaded = 2;
}
DLOG(@"loaded : %i", loaded);
[self.tableView reloadData];
我的日志看起来像这样:
2015-06-23 10:07:47.279 myproject[199:11514] __54-[MyTableViewController fetchData]_block_invoke: Success! Response from the back
2015-06-23 10:07:47.280 myproject[199:11514] __54-[MyTableViewController fetchData]_block_invoke: loaded : 2
2015-06-23 10:07:47.282 myproject[199:11514] -[MyTableViewController tableView:numberOfRowsInSection:]:
2015-06-23 10:07:47.283 myproject[199:11514] -[MyTableViewController tableView:numberOfRowsInSection:]:
2015-06-23 10:07:47.288 myproject[199:11514] -[MyTableViewController tableView:cellForRowAtIndexPath:]:
2015-06-23 10:07:47.289 myproject[199:11514] -[MyTableViewController tableView:cellForRowAtIndexPath:]: loaded 2
2015-06-23 10:07:47.301 myproject[199:11514] -[MyTableViewController tableView:cellForRowAtIndexPath:]:
2015-06-23 10:07:47.305 myproject[199:11514] -[MyTableViewController tableView:cellForRowAtIndexPath:]: loaded 2
2015-06-23 10:07:47.351 myproject[199:11514] -[MyTableViewController tableView:cellForRowAtIndexPath:]:
2015-06-23 10:07:47.355 myproject[199:11514] -[MyTableViewController tableView:cellForRowAtIndexPath:]: loaded 2
2015-06-23 10:07:47.395 myproject[199:11514] -[MyTableViewController tableView:cellForRowAtIndexPath:]:
2015-06-23 10:07:47.399 myproject[199:11514] -[MyTableViewController tableView:cellForRowAtIndexPath:]: loaded 2
2015-06-23 10:07:47.439 myproject[199:11514] -[MyTableViewController tableView:cellForRowAtIndexPath:]:
2015-06-23 10:07:47.443 myproject[199:11514] -[MyTableViewController tableView:cellForRowAtIndexPath:]: loaded 2
我的5个单元格带有文本,我唯一的问题是只有第一个具有良好的字体大小,其他将是默认字体大小。但是,如果我转到另一个视图并返回(触发完全相同的动作),一切都很好。如何在第一次通话时获得好的字体?
答案 0 :(得分:0)
首次使用时:
[tableView dequeueReusableCellWithIdentifier:@"notifCell"];
如果返回nil,要求您实现单元格创建。
使用始终返回单元格的dequeueReusableCellWithIdentifier:forIndexPath
。
您的解决方案是致电
[tableView reloadData]
会重新加载所有可见的单元格,但您需要确保在将loaded
设置为所需值后调用它,而不是在此之前。
还要确保tableView:numberOfRowsInSection
为您的案例返回适当数量的行。
答案 1 :(得分:0)
这是我发现的,事实上cell.bounds.size.height一直都是错的,因为
tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
被称为AFTER
tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
这就是为什么字体大小与单元格高度的百分比有误。现在我只需要找到一种方法在另一种方法之前调用heightForRow。
答案 2 :(得分:0)
用户回答的解决方案是将高度存储在NSMutableArray
中,然后在cellForRowAtIndexPath
中使用它,这意味着在重新加载表之前先计算高度。
然后在cellForRowAtIndexPath
下面会看起来像:
eq:NSMutableArray *heights;
保持计算的高度
cell.textLabel.font = [UIFont systemFontOfSize: ([heights[indexPath.row] floatValue]) * (30/100) ];