self.tableView reloadData无法垂直居中我的标签文本

时间:2014-02-20 18:45:51

标签: ios objective-c uitableview reloaddata

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"MyCell";
    MyCustomCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];

    if (cell == nil)
        cell = [[MyCustomCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];


    Movie *movie = [self.movies objectAtIndex:indexPath.row];

    cell.title.text = movie.title;
    cell.subtitle.text = movie.subtitle;

    cell.subtitle.numberOfLines = 0;
    [cell.subtitle sizeToFit];

    return cell;
}

我从两个地方打电话给reloadData。一个是loadInitialData函数的末尾,它是从viewDidLoad调用的。

第二个是从viewDidAppear调用的,虽然这对我的问题无关紧要,因为它存在于它之前并且没有它存在。

我最初加载3行样本数据,包括标题和副标题。现在发生的事情是,当这个窗口首次启动时,我的字幕文本是垂直居中的。如果我抓住桌子并且滚动高,突然我的[cell.subtitle sizeToFit]开始行动,我的文字垂直向上移动,这是所希望的。

所以我的问题是......为什么文本从一开始就垂直居中? reloadData也不起作用。当我从添加新行返回时,除了新添加的行之外的所有行都垂直对齐到顶部。新行不正确地垂直居中。

为什么这不起作用?一切似乎都很好。添加了新数据等。通过NSLog语句,我已在numberOfRowsInSection被调用后立即调用reloadData

那么为什么垂直对齐顶部的文本不起作用?

谢谢!

2 个答案:

答案 0 :(得分:0)

这可能是因为UITableViewCell尚未布局,因此它还没有尺寸。尝试在此UITableViewDelegate方法中执行sizeToFit

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath

我不确定这会有效,但值得尝试。

答案 1 :(得分:0)

在返回单元格之前添加[cell setNeedsLayout];,以便在演示之前布置单元格。