Почему кнопка не получает нажатия
Вопрос
Кнопка видна на экране, но не реагирует на касания. Какая причина подходит?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Варианты ответа
- У кнопки
alpha = 0.5, а полупрозрачные view не получают касания - Кнопка добавлена в иерархию через
addSubviewещё вviewDidLoad - Кнопка находится внутри
UIStackView, который перехватывает касания - Кнопка выходит за границы супервью, и касание попадает вне его
boundsправильный ответ
Разбор
Hit-testing начинается с окна и спускается по иерархии: view проверяет point(inside:with:) по своим bounds и только тогда опрашивает детей. Если кнопка торчит за пределы родителя (видно при clipsToBounds = false), касание вне родителя до неё не дойдёт. Ещё причины: isUserInteractionEnabled = false у предка, скрытие, alpha меньше 0.01, перекрытие другой view. Альфа 0.5 касания не блокирует, а stack view и viewDidLoad тут ни при чём.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Предыдущий вопрос
Где брать финальный размер view
Следующий вопрос
Content hugging и compression resistance
Ещё по теме «UIKit»
- Неверная картинка в переиспользуемой ячейке
- Diffable data source и повторяющиеся идентификаторы
- Что делать в prepareForReuse
- reconfigureItems и reloadItems
- Ячейки с автоматической высотой
- Разница между frame и bounds
- Задача на Swift: разница снимков для diffable data source
- setNeedsLayout и layoutIfNeeded