#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/uibutton2. Очень признателен!! Спасибо, что нашли время, чтобы помочь и предложить лучшую практику.