Как я могу опустить вызов [super layoutSubviews] для UITableViewCell? - PullRequest
1 голос
/ 11 февраля 2012

У меня очень сложный подкласс UITableViewCell, и в Instruments я обнаружил, что вызов [super layoutSubviews] потребляет 5% времени выполнения при прокрутке табличного представления.Поэтому я попытался пропустить вызов [super layoutSubviews], так как сам делаю макет всех подпредставлений.Это дало мне повышение производительности.Однако я обнаружил, что без вызова [super layoutSubviews] интерактивные подвиды, такие как кнопки, больше не получают сенсорные события.

Поэтому мой вопрос заключается в том, как я могу опустить вызов [super layoutSubviews] в моем подклассе UITableViewCell для полученияповышение производительности без прерывания доставки сенсорных событий в подпредставлениях?

Ответы [ 2 ]

0 голосов
/ 13 февраля 2012

Наконец выследил его. Это потому, что cell.contentView.frame равен (0, 0, 320, 44) без вызова [super layoutSubviews], а границы недостаточно велики (в частности, высота 44 недостаточно высока), чтобы охватить все интерактивные подпредставления Согласно документу -hitTest:withEvent::

Точки, находящиеся за пределами границ получателя, никогда не указываются как хиты, даже если они действительно лежат в пределах одного из подпредставлений получателя. Это может произойти, если для свойства текущего представления clipsToBounds установлено значение НЕТ, и затронутое подпредставление выходит за границы представления.

Это именно тот случай, здесь.

0 голосов
/ 11 февраля 2012

Вы пытались перечислить через подпредставления и установить для userInteractionEnabled значение YES?Все еще своего рода хак, но если это действительно единственное, чего не хватает, это должно сработать.

Удачи,

Дэмиен

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...