2015-03-28 3 views
1

У меня есть UITableView с одной ячейкой Right Detail и прокрутка отключена, а высота таблицы установлена ​​равной 44 (такая же, как и ячейка). Ячейка отображает данные, представляющие объект класса A., когда пользователь забирает ячейку, он подталкивает новый VC с таблицей для выбора нового объекта класса A. Однако когда я возвращаюсь к старому VC и звоню reloadData в viewWillAppear, detailTextLabel.frame полностью изменен и не отображается.UITableViewCell right detailTextLabel frame resizes после reloadData

Итак, в этом журнале первая строка - это начальный вызов cellForRowAtIndexPath (объект 1), и все отображается правильно. Вторая строка - после выбора объекта 2 (пустая строка для detailTextLabel). Третья строка - после повторного выбора объекта 1, а detailTextLabel, который работал до этого, теперь невидим.

2015-03-28 10:48:11.747 dojo[32523:5852510] detail text label: <UITableViewLabel: 0x15d5de470; frame = (463 12; 42 20); text = '1234'; opaque = NO; autoresize = RM+BM; layer = <_UILabelLayer: 0x17429a810>> 
2015-03-28 10:48:20.374 dojo[32523:5852510] detail text label: <UITableViewLabel: 0x15d5de470; frame = (468.5 13; 36.5 19.5); text = ''; autoresize = RM+BM; layer = <_UILabelLayer: 0x17429a810>> 
2015-03-28 10:48:23.192 dojo[32523:5852510] detail text label: <UITableViewLabel: 0x15d5de470; frame = (505 13; 0 0); text = '1234'; autoresize = RM+BM; layer = <_UILabelLayer: 0x17429a810>> 

Я создал таблицу в раскадровке с соответствующим идентификатором повторного использования и звоню dequeueReusableCellWithIdentifier, чтобы получить клетку;

Update: gist for VC

Update 2: Я не могу загрузить весь мой проект, но я создал demo project с частью реального кода (несколько измененных зависимости), который имеет ту же проблему.

+0

Вы должны опубликовать весь код контроллера с табличным представлением. Как в стороне, если у вас только одна ячейка, почему вы используете табличное представление вообще? – rdelmar

+0

Я использую таблицу с одной ячейкой, потому что у меня есть отдельная таблица над ней для других объектов, и я хочу, чтобы UX был одинаковым для пользователя, т. Е. Для редактирования объекта. – doman412

+0

Может быть, вы должны создать пользовательскую ячейку с ограничениями для меток. –

ответ

2

Посмотрев на свой код, кажется, это ошибка в коде Apple. Если я использую sizeToFit после установки текста (и есть номер транспортного средства, чтобы увидеть), появится номер, но шеврон исчезнет, ​​пока вы не нажмете, а затем снова отпустите; это определенно не так, как должно работать. Вы можете обойти его достаточно легко, передав одно пространство в виде текста, если вместо пустой строки нет номера транспортного средства. Так,

[cell.detailTextLabel setText: vehicle.number ? : @" "]; 

вместо этого

[cell.detailTextLabel setText: vehicle.number ? : @""]; 

Числа в журнале все еще позади; вам нужно снова нажать и всплыть, прежде чем вы увидите правильные кадры в журналах, но ярлык и шеврон отображаются правильно.

+0

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

+0

@ doman412, да, похоже, что что-то не выкладывается в правильное время. Я также заметил, что могу исправить это, вызвав layoutSubviews в ячейке (но вы не должны называть этот метод напрямую, а layoutIfNeeded не работает). – rdelmar

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