UIHostingController blocks all touches behind it. You basically have to choose SwiftUI, or UIKit? If you want a SwiftUI overlay over a UIKit view for example, you can't have that.
HostingPassthrough allows you to fix this by inheriting HostingParentController
instead of UIViewController
in the places where you will be adding SwiftUI views through UIHostingController.
makeBackgroundsClear = false
in viewDidLoad()
.forwardBaseTouchesTo
to another UIView you want to handle your touches.HostingParentView
instead of UIView
, in the case that you aren't adding the UIHostingController
to a parent view controller. While you should always add the UIHostingController
to a parent view controller if possible to correctly manage view lifecycle, there may be instances where you are for example adding SwiftUI components to a reusable custom UIView in which case using HostingParentView
would be acceptable.ScrollView
is messing up your tap targets, you can set ignoreTouchesOnSwiftUIScrollView
to true
so any touches that reach the bottom of a SwiftUI ScrollView
(not the content), are passed to whatever is under it.Some cool logic will then be applied overriding the hitTest
method, which ignores any touches in parts of a UIHostingController
that don't contain a SwiftUI view and pass it to whatever is underneath instead.
TODO:
.contentShape()
not working.All these views are tappable, even behind the 3 UIHostingController's!
link |
Stars: 68 |
Last commit: 33 weeks ago |
Swiftpack is being maintained by Petr Pavlik | @ptrpavlik | @swiftpackco | API | Analytics