LayoutSubviews для пользовательских UITableViewCell и UIView - PullRequest
1 голос
/ 30 июня 2010

У меня есть кастом UITableViewCell. Он имеет UIView, который добавляется к «contentView» UITableViewCell. Для любого обновления я перерисовываю это UIView, вызывая его "setNeedsDisplay" и реализуя рисование внутри " drawRect " метода UIView.

UITableViewCell переопределяет " willTransitionToState " и в соответствии со значением битовой маски просит UIView перерисовать.

Поскольку я прошу UIView перерисовать себя снова, каждый раз, когда я делаю «движение по экрану», я вижу, что клетка мигает; даже текст, который не переместился из-за кнопки «Удалить», страдает от мерцания, поскольку все перерисовывается.

Я знаю, что возможное решение - это не вызвать " setNeedsDisplay " UIView из " willTransitionToState ", а вместо этого вызвать " setNeedsLayout " и пусть UIView реализует " layoutSubviews ".

Вот где я застрял: как я могу изменить макет моего UIView, поскольку внутри моего UIView все " Draw " (я использую методы "drawInRect" и "drawAtPoint" для строк и изображений). С правой стороны также есть строка, которую я хочу скрыть, когда появляется кнопка « Удалить » (как в приложении «Сообщения» на iPhone).

Как я могу сделать это, выполнив перепланировку вместо перерисовки?

Спасибо !!!

1 Ответ

2 голосов
/ 03 октября 2011

Я думаю, что есть проблема с вашим подходом.Вместо того, чтобы рисовать все, лучше настроить ваши подпредставления в методе init или в NIB.

В методе willTransitionToState обновите все подпредставления в соответствии с переходом состояния.

В layoutSubviews обновите происхождение и размер каждого подпредставления по мере необходимости.подробности из willTransitionToState документации.Хотя я уверен, что вы уже видели это:

Подклассы UITableViewCell могут реализовать этот метод для анимации дополнительных изменений в ячейке, когда она меняет состояние.UITableViewCell вызывает этот метод всякий раз, когда ячейка переходит между состояниями, например, из нормального состояния (по умолчанию) в режим редактирования.Пользовательская ячейка может устанавливать и позиционировать любые новые виды, которые появляются с новым состоянием.Затем ячейка получает сообщение layoutSubviews (UIView), в котором она может расположить эти новые представления в их окончательных местоположениях для нового состояния.Подклассы всегда должны вызывать super при переопределении этого метода.

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