Это может сработать для вас ...
- Добавить кнопку как подпредставление прокрутки
- установить класс просмотра прокрутки на
PassTouchScrollView
- ограничить верхнюю часть кнопки верхней частью вида прокрутки с константой для вертикального размещения в нужном месте
- сохранить исходную константу и обновить ее, когда прокручивается представление прокрутки, чтобы сохранить кнопку в ее исходном y-положении
Вот пример. Настройте вид прокрутки и его подпредставления контента, как обычно. Добавьте свою кнопку в качестве подпредставления и ограничьте ее верхней частью вида прокрутки (а не ближайшим соседом). Установите класс представления прокрутки на PassTouchScrollView
и подключите его через @IBOutlet
. Подключите верхнее ограничение через @IBOutlet
. Наконец, подключите кнопку touchUpInside к @IBAction
.
class PassTouchScrollView: UIScrollView {
override func touchesShouldCancel(in view: UIView) -> Bool {
if type(of: view) == UIButton.self {
return true
}
return super.touchesShouldCancel(in: view)
}
}
class PassThroughTestViewController: UIViewController, UIScrollViewDelegate {
@IBOutlet var theScrollView: PassTouchScrollView!
// constraint from top of button to top of scroll view
@IBOutlet var theButtonTopConstraint: NSLayoutConstraint!
var origTop: CGFloat = CGFloat(0)
override func viewDidLoad() {
super.viewDidLoad()
theScrollView.delegate = self
// save the original top constraint constant
origTop = theButtonTopConstraint.constant
}
func scrollViewDidScroll(_ scrollView: UIScrollView) {
// when scrolling, update the top constraint to keep the button in-place
theButtonTopConstraint.constant = origTop + scrollView.contentOffset.y
}
@IBAction func didTap(_ sender: Any) {
print("tapped")
}
}