Зарегистрировать UITapGesture на всю ширину горизонтального стека элементы

#ios #swift

#iOS #swift

Вопрос:

У меня есть горизонтальный стековый вид внутри вертикального стекового вида. Проблема в том, что я хочу зарегистрировать UITapGesture для всей строки, а не только для элементов внутри. Поскольку выравнивание родительского (вертикального) StackView = .leading, это приводит к тому, что оставшаяся незанятая ширина моего StackView перестает реагировать на клики.

По сути, я бы хотел, чтобы вся строка была кликабельной, а не только элементы внутри нее. Я установил горизонтальный цвет bg на черный, чтобы дать представление о ширине кликабельности.

Заранее спасибо.

введите описание изображения здесь

Вот общая идея моего кода:

 // Parent vertical stackView
private(set) var optionStackView: UIStackView = {
    let stackView = UIStackView()
    stackView.axis = .vertical
    stackView.alignment = .leading
    return stackView
}()

// Child horizontal stackView inside optionStackView
private(set) var takePictureStackView: UIStackView = {
    let stackView = UIStackView()
    stackView.backgroundColor = .black
    return stackView
}()

...
takePictureStackView.addArrangedSubview(takePictureImageView)
takePictureStackView.addArrangedSubview(takePictureLabel)

optionStackView.addArrangedSubview(takePictureStackView)
...

    // Attaching tapGesture recognizer from VC
takePictureStackView.addGestureRecognizer(UITapGestureRecognizer(target: self, action:  #selector(self.takePicture)))
 

Ответ №1:

Добавьте ограничение для ширины takePictureStackView , чтобы она была равна ширине optionStackView .

Это расширится takePictureStackView по горизонтали и увеличит доступную область.

Комментарии:

1. После того, как вы закончите с увеличением открываемой области, я бы также предложил идею улучшения с точки зрения более чистого кода. То, чего вы пытаетесь достичь с помощью UIStackView UIImageView UILabel , также может быть достигнуто с помощью одного UIButton . Один UIButton может содержать как изображение, так и текст одновременно. Вставки между ними также регулируются. Пожалуйста, проверьте документы для получения дополнительной информации: developer.apple.com/documentation/uikit/uibutton

2. Очень признателен!! Спасибо, что нашли время, чтобы помочь и предложить лучшую практику.