2013-04-26 3 views
0

У меня есть UITableViewCell с динамической высотой на основе текстового содержимого. В tableview:heightForRowAtIndexPath: высота вычисляется. Это хорошо работает.Настроить высоту UITableViewCell при удалении салфетки

Когда ячейка переходит в режим редактирования с помощью редактированияStyle UITableViewCellEditingStyleDelete, она несколько раз откладывает ячейку и может вытолкнуть содержимое, вызывающее изменение rowHeight. Опять же, это хорошо работает, так как переключение табличного вида на редактирование приводит к тому, что таблица ретранслируется, и поэтому rowHeight получает пересчет.

Когда вы нажимаете красную кнопку или проведите по ней, в правой части ячейки появится кнопка «Удалить». Это, однако, НЕ запускает ретрансляцию таблицы, а только сама ячейка. Проблема здесь в том, что если содержимое переходит в нижний край, ячейка не изменяется.

Есть ли способ вызвать повторную компоновку таблицы при появлении кнопки удаления?

ответ

1

В общем, высоту UITableViewCell может быть установлена ​​только с помощью tableview:heightForRowAtIndexPath:, и последний метод вызывается только один раз (для каждой строки в секцию), прежде чем tableView:cellForRowAtIndexPath:, так что вы должны [tableview reloadData], если хотите отрегулировать высоту UITableViewCell.

Может быть, ваши может сделать что-то в этих методах делегата

// The willBegin/didEnd methods are called whenever the 'editing' property is automatically changed by the table (allowing insert/delete/move). This is done by a swipe activating a single row 
- (void)tableView:(UITableView*)tableView willBeginEditingRowAtIndexPath:(NSIndexPath *)indexPath; 
- (void)tableView:(UITableView*)tableView didEndEditingRowAtIndexPath:(NSIndexPath *)indexPath; 

на ваш вопрос, вы можете сбросить свойство управления текстом в - (void)layoutSubviews в пользовательских UITableViewCell.

- (void)layoutSubviews 
{ 
    [super layoutSubviews]; 
    CGFloat theWidth = self.frame.size.height; //changed when entering the edit style 
    ... 
} 

Надейтесь, что это вам поможет.

+0

[will/didBeginEditingRowAtIndexPath] запускаются только на слайде, а не при нажатии красной кнопки. Я обнаружил, что willTransitionToState можно использовать для обнаружения изменения. К сожалению, [reloadData] вызывает бесконечные циклы, вызванные внутри этих методов. Наверное, я могу поставить его на таймер, но это так неправильно. – batkuip

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