As far as I'm aware you'll have to use the OnScroll event as you mentioned. But there is a trick you can do to keep from cluttering the event's logic. Add a dynamic panel, it will remain empty and invisible. On the OnMove event of this panel, put all the logic for checking the visibility of this header (check scroll position, check window height and compare to the header's position) that you would have put on the OnScroll event. Then, on the OnScroll event, before everything else, put a case with the action: Move (panel you jus added) by 0,0. Now when you scroll, the panel will move by 0,0, and the logic you implemented will execute.
Just make sure the case after this one isn't set to IF ELSE so its execution won't depend on the move you added.