Snap UI Text inside canvas

Occasionally, when the user touches the screen, I want to show a message just above the point they touch (so that it’s not hidden by their finger). I can get the position on screen easily enough, and it’s straightforward to just call text.rectTransform.position = position where text is a UnityEngine.UI.Text object and position is the position they touched (plus some value), and this work fine. However when the position is close to the edges of the screen, part of the Text is outside the canvas.

I’d like to somehow snap the Text to a position so that it will always be fully visible. I’ve tried testing the width of the Text element with the position and the screen width, but it seems that when the screen size changes, the width of the Text is always given in “reference pixels”, while the width of the screen scales. This would make that calculation very complicated.

Does anyone know if there’s a better way to make the check and adjustment, to ensure that the text is always fully visible?

If you can work out the size of the text you can do : here we have called them textwidth and textheight

int x = Mathf.Clamp(Text.rectTransform.position.x,-screen.width/2 + textwidth/2,screen.width/2 -textwidth/2))
int y = Mathf.Clamp(Text.rectTransform.position.y,-screen.height/2 + textheight/2,screen.height/2 -textheight/2))

    Text.rectTransform.position = new Vector2(x,y)

hope that gives you an idea.