Faits: A. Le 21 mars 2008, X._ a été arrêté et placé en détention préventive dans le cadre d'une enquête ouverte contre lui pour lésions corporelles simples (art. 123 CP), tentative de contrainte sexuelle (art. 22 et 189 CP) et viol (art. 190 CP). Il est soupçonné d'avoir commis ces actes à l'encontre de son épouse, Y._. Le juge d'instruction en charge du dossier lui a signifié son maintien en détention en raison des risques de collusion et de fuite. Par ordonnance du 26 mars 2008, la Chambre d'accusation du canton de Genève a prolongé la détention pour deux mois, sur requête du juge d'instruction. Le 8 avril 2008, X._ a présenté une demande de mise en liberté, que la Chambre d'accusation a rejetée par ordonnance du 11 avril 2008. La détention a été prolongée pour deux mois supplémentaires, par ordonnance du 23 mai 2008. B. Le 18 juillet 2008, X._ a présenté une nouvelle requête de mise en liberté. Le 21 juillet 2008, le Procureur général du canton de Genève a requis une prolongation de la détention, en invoquant les besoins de l'instruction ainsi qu'un risque de fuite. Il précisait qu'il s'apprêtait à déposer ses réquisitions auprès de la Cour de justice du canton de Genève. Par ordonnance du 22 juillet 2008, la Chambre d'accusation a prolongé la détention de X._ jusqu'au 22 octobre 2008 et a ordonné sa mise en liberté provisoire moyennant le versement d'une caution de 15'000 francs. Constatant que les faits reprochés au prénommé étaient graves et que les charges étaient suffisantes, elle a considéré que le maintien en détention s'imposait en raison d'un risque de fuite qualifié d'élevé. C. Agissant par la voie du recours en matière pénale, X._ demande au Tribunal fédéral d'annuler cette décision et d'ordonner sa mise en liberté immédiate à certaines conditions. Il requiert en outre l'assistance judiciaire. La Chambre d'accusation et le Procureur général du canton de Genève se sont déterminés; ils concluent au rejet du recours. Le recourant a présenté des observations complémentaires.