diff --git a/android/src/main/java/com/horcrux/svg/VirtualView.java b/android/src/main/java/com/horcrux/svg/VirtualView.java index d51601011..815b236d6 100644 --- a/android/src/main/java/com/horcrux/svg/VirtualView.java +++ b/android/src/main/java/com/horcrux/svg/VirtualView.java @@ -591,10 +591,14 @@ void setClientRect(RectF rect) { int bottom = (int) Math.ceil(mClientRect.bottom); setMeasuredDimension(width, height); if (!(this instanceof GroupView)) { - setLeft(left); - setTop(top); - setRight(right); - setBottom(bottom); + SvgView root = this.getSvgView(); + // Prevent going out of the root view bounds to properly handle touch events + if (root != null) { + setLeft(Math.max(left, 0)); + setTop(Math.max(top, 0)); + setRight(Math.min(right, root.getWidth())); + setBottom(Math.min(bottom, root.getHeight())); + } } EventDispatcher eventDispatcher = UIManagerHelper.getEventDispatcherForReactTag(mContext, getId()); diff --git a/apple/Elements/RNSVGSvgView.mm b/apple/Elements/RNSVGSvgView.mm index 7cb97e4d4..a00e14335 100644 --- a/apple/Elements/RNSVGSvgView.mm +++ b/apple/Elements/RNSVGSvgView.mm @@ -342,6 +342,9 @@ - (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event - (RNSVGPlatformView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event { + if (point.x < 0 || point.y < 0 || point.x > self.bounds.size.width || point.y > self.bounds.size.height) { + return nil; + } CGPoint transformed = point; if (self.align) { transformed = CGPointApplyAffineTransform(transformed, _invViewBoxTransform);