2014-02-20 4 views
0
- (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.self.tableView reloadData не работает, чтобы вертикально центрировать мой текст ярлыка

Второе вызывается от viewDidAppear, хотя это несущественно для моей проблемы, потому что оно существовало до него и существует без него.

Первоначально загружаю 3 строки выборочных данных с заголовками и субтитрами. Теперь, что происходит, мой текст субтитров вертикально центрируется, когда это окно запускается первым. Если я хватаю за стол и прокручиваю высоко, внезапно мой [cell.subtitle sizeToFit] вступает в действие, и мой текст идет вверх по вертикали, что и нужно.

Итак, моя проблема ... почему текст вертикально центрирован с самого начала? reloadData тоже не работает. Когда я вернусь из добавления новой строки, все строки, кроме недавно добавленной строки, будут выровнены по вертикали вверху, как следует. Новая строка имеет неправильную вертикальную ориентацию.

Почему это не работает? Все кажется хорошим. Новые данные добавляются и т. Д. Через операторы NSLog, я подтвердил, что numberOfRowsInSection сразу же вызывается после вызова reloadData.

Так почему же выравнивание текста по вертикали вверх не работает?

Спасибо!

ответ

0

Возможно, это связано с тем, что UITableViewCell еще не выровнен, и поэтому он еще не имеет размера. Попробуйте делать sizeToFit в этом методе UITableViewDelegate

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

Я не уверен, что это будет работать, но это стоит попробовать.

+0

Спасибо Стивен. Я должен был упомянуть, что я тоже это пробовал, и это тоже не решило мою проблему. На самом деле я очень взволнован. –

+0

Посмотрите на фрейм ячейки и contentView, чтобы убедиться, что они имеют правильный размер в начальном вызове cellForRowAtIndexPath. –

0

Добавить [cell setNeedsLayout];, прежде чем вы вернете ячейку, чтобы она отображала ячейку перед представлением.

+0

Я пробовал это, а также setNeedsDisplay прямо перед возвратом ячейки, но безрезультатно. –

Смежные вопросы