IOS9 - UITableViewCellContentView скрывает элементы управления внутри ячейки
Я создал пользовательский UITableViewCell под названием "SwitchCell", у которого есть переключатель.
Только в iOS9, используя Xcode 7 beta, представление содержимого в ячейке находится поверх коммутатора. (См. Снимок экрана "Просмотр иерархии". Вы можете четко видеть, что представление содержимого ячейки находится поверх других представлений.):
![введите описание изображения здесь]()
Итак, все касания к UISwitch перехватываются, и IBAction не срабатывает.
В iOS8 это не проблема. Смотрите скриншот для симулятора iOS 8.4. Вы можете видеть, что над элементами управления нет содержимого.
![введите описание изображения здесь]()
У кого-нибудь была эта проблема?
Я попытался переделать NIB с нуля, но тот же результат.
My NIB - это представление размера свободной формы, без строки состояния. Он имеет два выхода: один для UILabel, один для UISwitch.
РЕДАКТИРОВАТЬ: пожалуйста, не забудьте проверить приведенный ниже ответ, который просит проверить, что вид корневой ячейки не только UIView, но и UITableViewCell. Эта проблема также может быть побочным эффектом.
Ответы
Ответ 1
После дальнейшего расследования и поиска я нашел свое решение здесь:
Кнопка в UITableViewCell не отвечает в соответствии с ios 7
Что для меня было исправлено:
cell.contentView.userInteractionEnabled = NO;
Это предотвращает перехват событий сотового содержимого, даже если он находится поверх других представлений.
Эта проблема произошла не только на iOS9, но и на iOS7. В iOS8 представление Content было за элементами управления.
Ответ 2
Проблема может быть в файле .xib для вашей ячейки. Когда вы создаете ячейку в отдельном .xib, не забудьте перетащить UITableViewCell на холст, не UIView.
Ответ 3
У меня была эта проблема, когда я повторно использовал ячейку как .xib. Я не понял, но когда я впервые создал xib, представление по умолчанию, которое оно создало, было фактически UIView
, а не UITableViewCell
. Кажется, что на каком-то этапе UIKit добавляет представление содержимого поверх других моих элементов и поэтому прерывает определенные события (например, события касания).
Я решил это, открыв мой xib файл и перетащив UITableViewCell
на холст и скопировав элементы моего интерфейса из старого представления в новую ячейку.
Впоследствии дополнительные параметры также стали доступны в инспекторе атрибутов, который соответствовал тем, которые были для UITableViewCell
.