Trent Boult and Tim Southee both bowled double wicket maidens that broke the Sri Lankan middle order. Boult's double strike took his Test wicket tally to 251.
The second day's play got off to a delayed start due to rain. Sri Lanka started with captain Dimuth Karunaratne and Angelo Mathews in the middle. Mathews was the first of the two wickets that Boult picked up in the fifth over of the day.
It was not the best of deliveries from the pacer as the attempted short ball didn't rise too much and ended up drifting down the leg side. However, Matthews was done by the lack of pace and went for a pull early on, only to nick it behind to wicketkeeper BJ Watling.
Three balls later, Boult trapped Kusal Perera plumb in front of the stumps to leave the hosts reeling at 93/4. Karunaratne and Dhananjaya de Silva then gave Sri Lanka a semblance of stability with a 37-run stand but that was soon broken by Southee.
He first removed Karunaratne, who was looking set for another big score following his match-winning ton in the first Test. Karunaratne looked to drive a delivery that was seaming away but ended up edging it to Watling who gleefully pouched the catch.
Three balls later Southee forced another edge, this time off Niroshan Dickwella, that also landed in the safe hands of Watling, leaving Sri Lanka tottering at 130/6.
De Silva and Dilruwan Perera were fending off New Zealand's onslaught when rain called for an early halt to the proceedings. Lunch was taken soon after the players left the field.
Brief scores: Sri Lanka 144/6 (Dimuth Karunaratne 65, Dhananjaya de Silva 32 not out; Trent Boult 2/33, Tim Southee 2/40) vs New Zealand