Anteriormente, eu tinha exatamente o mesmo requisito para paginação e consegui fazê-lo funcionar usando o CodeIgniter Active Record.
Primeiro, defina a opção
SQL_CALC_FOUND_ROWS
como uma pseudocoluna em sua instrução select e defina a consulta de escape como false:$this->db->select('SQL_CALC_FOUND_ROWS null as rows, other columns ...',FALSE);
Então, depois de executar sua consulta com o limite e o deslocamento no lugar, atribua o conjunto de resultados a uma matriz de retorno:
$data = $this->db->get();
$return['results'] = $data->result();
// Do something with the results
Por fim, execute uma segunda consulta para obter as linhas encontradas e também atribua isso à matriz de retorno. Estou usando o encadeamento de métodos aqui para fazer tudo em uma única etapa.
$return['rows'] = $this->db->query('SELECT FOUND_ROWS() count;')->row()->count;
E retorne o resultado e a matriz de contagem de linhas.
return $return;