Hafner se je rodil 21. januarja 1920 v Stražišču pri Kranju. Leta 1941 je vstopil v NOB in med vojno hitro napredoval. Bil je politični komisar I. grupe odredov in 18. divizije, sekretar PK SKOJ in tudi udeleženec Zbora odposlancev slovenskega naroda v Kočevju. Za svoje delovanje v osvobodilnem boju je bil večkrat tudi odlikovan.
Druga svetovna vojna je njegovo življenje dodobra zaznamovala, že leto po vstopu v NOB so mu nacisti zaradi sodelovanja s partizani ubili več članov družine.
Po osamosvojitvi Slovenije je postal član prenovljene Zveze komunistov Slovenije.
Po vojni so, kot je pred leti povedal za medije, želeli vzpostaviti boljši in pravičnejši sistem. Tako je najprej politično deloval v domačem Kranju, nato je postal podpredsednik izvršnega sveta Socialistične republike Slovenije, zatem predsednik sindikatov RS, pozneje pa predsednik republiške skupščine.
Medtem je tudi šest let živel v Beogradu.
Hafnerjevo politično pot je zaznamoval njegov spor s srbskim politikom Slobodanom Miloševićem, ko mu je na seji zveznega partijskega kongresa leta 1988 s prstom zažugal in ga obtožil protijugoslovanskega ravnanja. Nekoč je sicer izjavil, da ne razume, zakaj se ljudje najbolj spominjajo ravno tega dogodka, ko pa je storil toliko pomembnejših stvari, kot sta, denimo, uvedba pokojninskega zavarovanja za kmete in izboljšanje socialnega statusa delavca.
Upokojil se je že leta 1984, nato pa še pet let deloval kot član centralnega komiteja Zveze komunistov Jugoslavije. S politiko se je dokončno nehal ukvarjati po znanem odhodu Slovencev s kongresa leta 1989.