Pagination is not working on single-{slug}.php but works fine on page-{slug}.php

You forgot to start a new query.

And if you dont use have post on your custom query, you will get the main current query, in your case is your single.

$args = array(
       'post_type' => 'crew',
       'posts_per_page' => 10
       );

$your_custom_query = new WP_Query( $args ); // is that you forgot

// The Loop
if ( $your_custom_query->have_posts() ) :
while ( $your_custom_query->have_posts() ) : $your_custom_query->the_post();
  // Do Stuff
endwhile;
endif;

i dont know what is wp_pagenavi()

use paginate_links()

$big = 999999999; // need an unlikely integer
$pagination_args = array(
            'base' => str_replace( $big, '%#%', esc_url( get_pagenum_link( $big ) ) ),
            'format' => '?paged=%#%',
            'current' => max( 1, get_query_var('paged') ),
            'total' => $your_custom_query->max_num_pages,
            'type' => 'plain',
            'prev_text' => 'Prev',
            'next_text' => 'Next'
        );

echo(  paginate_links( $pagination_args )  );

And finish by a reset

wp_reset_postdata();