Left-arm seamer Thilan Thushara and off-spinner Muttiah Muralitharan shared six wickets to leave New Zealand struggling on 281 for eight on the third day of the first Test on Thursday.
Captain Daniel Vettori was unbeaten on 33 and Iain O’Brien three not out when bad light stopped play for the day, with the Kiwis trailing by 171 runs.
Thushara claimed three for 80 in 22 overs while Muralitharan picked up three for 66 from 37 miserly overs on his return to Test cricket after a knee injury forced him out of the recent Pakistan series.
Opener Tim McIntosh provided stubborn resistance with a gritty 69 from 226 balls, an innings that included six fours and a six, before being trapped lbw by Muralitharan.
The Kiwis, who started the day on 87 for two chasing Sri Lanka’s total of 452, frustrated the home attack in the morning as McIntosh added 49 in 18 overs with night-watchman Jeetan Patel. Muralitharan broke the partnership before lunch, trapping Patel lbw for 26.
Another stand then developed between McIntosh and Ross Taylor (35), the pair adding 51 for the fourth wicket.
Taylor was dropped on 27 by Nuwan Kulasekara at square leg but was eventually caught behind off Thushara.
The breakthrough revitalised Sri Lanka, with Muralitharan removing McIntosh and Thushara bowling Brendon McCullum for one off a thick inside edge.
Jesse Ryder chiselled out a useful 42 while all-rounder Jacob Oram was unfortunate to be given caught out at bat-pad for 12 when television replays showed the ball had missed the bat.
Sri Lanka took the new ball in an effort to polish off the tail and Kulasekara responded by bowling Ryder.
Earlier, the start was delayed for 90 minutes after early storms drenched the seaside venue.