I tried all that you listed here. And also on the whole internet. But my buttons still couldn't be handled.
Finally, the only thing helped me. And I was able to keep "isUserInteractionEnabled" ON on the Scroll View.
So, how I fixed it:
1) Go to Storyboard
2) Connect ContentView and MainView between each other

3) And select width/height equality

By the way, I also have views set up in the code (it doesn't work without prev steps for me).
// sizes
let width = self.view.safeAreaLayoutGuide.layoutFrame.width
mainView.frame = CGRect(x: 0 , y: 0, width: width, height: self.view.safeAreaLayoutGuide.layoutFrame.height)
contentView.frame = CGRect(x: 0 , y: 0, width: width, height: 1000)
scrollView.frame = CGRect(x: 0 , y: 0, width: width, height: mainView.frame.height)
// constraints:
contentView.widthAnchor.constraint(equalTo: self.view.safeAreaLayoutGuide.widthAnchor).isActive = true
scrollView.widthAnchor.constraint(equalTo: self.view.safeAreaLayoutGuide.widthAnchor).isActive = true
Of course, this is not the solution like "just press two buttons and you'll solve your problem". The main reason was related to constraints & content size in my case. Just FYI, maybe it will help someone.