У меня возникла проблема со свойством textLabel UITableViewCell при повторном выборе (касание, не поднимая пальца) уже выбранной ячейки.
У меня есть пользовательский контентView, добавляемый в фоновом режиме чуть ниже textLabel, который имеет динамическую высоту (включая ячейку), а также фон для textLabel, который постоянно имеет одинаковую высоту (50,0f-ish).
Я использую методы beginUpdates и endUpdates для анимации выбора и изменения кадра, чтобы предотвратить центрирование textLabel в ячейке сразу после обновления; удерживая его примерно в тех же пределах фона. Нет проблем при выборе разных ячеек, и textLabel остается сверху, где и должен быть.
Основная проблема сейчас заключается в том, что когда пользователь снова касается пальцем (не поднимая его) выбранной ячейки, textLabel центрируется в соответствии с изменением высоты ячейки.
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
DetailView *detailView = // Create detail view
// Add UIImageView from content to cell --------------------
UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
// Change textLabel colors, fontSize, and shadow properties
// Create CustomContentView *ccView = nil;
// ------
// Remove / Hide any existing CustomContentViews
// --- Code here
// -------
switch (hasImageInCustomView) {
case YES:
image = _imageInCustomView;
image = NO;
if (selectedIndexPath.row != indexPath.row) {
[tableView beginUpdates];
[tableView endUpdates];
}
CGRect frame = cell.textLabel.frame;
frame.size.height = 50.0f;
cell.textLabel.frame = frame;
return;
break;
default:
image = [detailView getImage];
break;
}
// ----
// Calculate height for image and add that to heightForExpandedRow property
// -- Code here...
// ----
[tableView beginUpdates];
[tableView endUpdates];
// Add subview with UIImageView
customContentView = [[CustomContentView alloc] initWithFrame:(CGRect){0, 0, kWidth, dynamicExpandedRow}];
contentView.clipsToBounds = YES;
[cell.contentView addSubview:customContentView];
[cell.contentView sendSubviewToBack:customContentView];
[customContentView setContentImage:image];
CGRect frame = cell.textLabel.frame;
frame.size.height = 50.0f;
cell.textLabel.frame = frame;
}
Я использую iOS 3.0, поэтому я не думаю, что didHighlightRowAtIndexPath: будет работать, и мне было интересно, есть ли какие-либо методы делегата, которые сбрасывают кадр textLabel после вызова beginUpdates/endUpdates.
Я зарегистрировал изменения кадров, и это выглядит так:
До вызова beginUpdates/endUpdates
<UILabel: 0x4e55500; frame = (10 0; 250 199); text = 'Some Text Goes Here...'; clipsToBounds = YES; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x4e55570>>
После вызова beginUpdates/endUpdates и смены кадра вручную
<UILabel: 0x4e55500; frame = (10 0; 250 50); text = 'Some Text Goes Here...'; clipsToBounds = YES; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x4e55570>>
Высота показывает 199 до вызова этих двух методов и 50 после. Однако textLabel продолжает центрироваться по вертикали в ячейке всякий раз, когда выбранная ячейка повторно выделяется, независимо от принудительного изменения кадра.
Если кто-нибудь может помочь, я был бы очень признателен.
Ссылка на пример изображения -> http://i50.tinypic.com/2r6o5k5.jpg