Ширина contentView UITableViewCell с заданным типом аксессуара

На iPhone, как определить ширину представления содержимого ячейки табличного представления, когда оно показывает определенное вспомогательное представление (индикатор раскрытия и т. Д.)?

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

Я легко могу жестко запрограммировать 20-пиксельное поле справа, которое кажется точным для обычного представления таблицы в портретной ориентации с индикатором раскрытия, но я бы предпочел сделать это правильно, чтобы он продолжал работать, если Apple решит чтобы настроить маржу.

(Это связано с этим вопросом.)


person Daniel Dickison    schedule 23.05.2009    source источник


Ответы (3)


Лично я бы просто жестко закодировал значения - проще, и все предсказуемо сломается.

Но если бы я делал это программно, я бы создал UITableViewCell, настроил бы свойства редактирования / вспомогательные представления, которые вам нужно измерить, а затем спросил бы, насколько велик его contentView.

Конечно, я бы, вероятно, сильно кэшировал это - выполнение выделения при запросе UITableView запрашивает информацию о высоте для меня, как будто это будет медленно (хотя, как всегда, сначала проверьте профилировщик).

person Colin Barrett    schedule 16.11.2009
comment
Да, я в итоге закодировал это жестко (это 20 пикселей). Думаю, я пытался создать фиктивную ячейку, как вы описали, когда я впервые пытался это сделать, и, если я правильно помню, это не сработало. Я думаю, что макет устанавливается только тогда, когда ячейка фактически отображается в виде таблицы. - person Daniel Dickison; 18.11.2009
comment
Ну что ж! Однако рад слышать, что вы нашли решение. - person Colin Barrett; 18.11.2009

У меня был бы подкласс UITableViewCell, содержащий все его подэлементы. Вы можете изменить рамку определенных элементов, когда ячейка входит и находится в режиме редактирования. Хороший пример этого приведен в руководстве Apple по программированию табличного представления в разделе о создании настраиваемой ячейки табличного представления.

person Brad The App Guy    schedule 24.05.2009

Я считаю, что свойство contentView UITableViewCell - это представление, которое содержит ваши ярлыки и т. Д., Поэтому его ширина должна быть вашим доступным размером для использования.

person Ed Marty    schedule 24.05.2009
comment
Проблема в том, что делегат табличного представления должен знать высоту ячеек, которые не видны, и, следовательно, не имеет фактического экземпляра ячейки, из которого можно получить contentView. Полагаю, я могу просто получить contentView a видимой ячейки и предположить, что все остальные ячейки будут иметь одинаковую ширину contentView. - person Daniel Dickison; 24.05.2009
comment
Вы можете попробовать просто удалить метод высоты из делегата, а затем установить высоту при настройке ячейки, используя метод в UITableView - person Ed Marty; 25.05.2009
comment
@Ed - это не сработает, потому что делегат табличного представления должен сообщить табличному представлению высоту всех ячеек еще до их настройки, чтобы представление прокрутки получило правильные размеры. - person Daniel Dickison; 31.05.2009
comment
В любом случае, просмотр contentView, похоже, не помогает. У меня есть ячейка с индикатором раскрытия, но ширина contentView по-прежнему равна 320. Дополнительное представление, кажется, просто накладывается на представление содержимого. Я тоже ищу чистое решение, но пока я полагаю, что просто жестко закодирую маржу в 20 пикселей. - person Mirko Froehlich; 07.11.2009