У меня была похожая проблема с UIStackView (но может быть любое другое представление).
Моя конфигурация была следующей:
Это классический случай, когда у меня есть контейнер, который нужно было разместить на заднем плане, с кнопками сбоку. Для макета я включил кнопки в UIStackView, но теперь средняя (пустая) часть stackView перехватывает прикосновения: - (
Что я сделал, так это создал подкласс UIStackView со свойством, определяющим подвид, который должен быть сенсорным.
Теперь любое прикосновение к боковым кнопкам (включенным в массив * viewsWithActiveTouch *) будет предоставлено кнопкам, в то время как любое прикосновение к стековому обзору в любом месте, кроме этих представлений, не будет перехвачено и, следовательно, передано любому объекту ниже стека вид.
/** Subclass of UIStackView that does not accept touches, except for specific subviews given in the viewsWithActiveTouch array */
class NoTouchStackView: UIStackView {
var viewsWithActiveTouch: [UIView]?
override func hitTest(point: CGPoint, withEvent event: UIEvent?) -> UIView? {
if let activeViews = viewsWithActiveTouch {
for view in activeViews {
if CGRectContainsPoint(view.frame, point) {
return view
}
}
}
return nil
}
}