Vernon Philander's unbeaten fifty revived South Africa, after Stuart Broad sparked a collapse that saw the Proteas lose four wickets in the last session of a see-saw first day of the second Test at Trent Bridge on Friday.
South Africa were 309 for six at stumps after returning captain Faf du Plessis won the toss.
Philander was 54 not out and recalled all-rounder Chris Morris, one of three changes to the side that lost the first of a four-Test campaign by 211 runs at Lord's last week, 23 not out.
Their unbroken seventh-wicket partnership was worth 74 runs with Philander, primarily a pace bowler, making his second fifty of the series.
South Africa had been 179 for two at tea, but they soon slumped to 235 for six.
The previously well set Quinton de Kock (68) and Hashim Amla (78) both fell to Broad as the fast bowler, who led England's attack with three wickets for 47 runs in 19 overs, struck on his Nottinghamshire home ground.
But conditions for batting improved as the day wore on, with grey clouds replaced by sunny blue skies at stumps.
"The sun came out at the wrong time," Broad told Sky Sports.
"It's a pretty good pitch to bat on, but when there's cloud you feel in the game a little bit."
To the very first ball after tea, left-hander de Kock -- whose tally of 11 Test fifties but just three hundreds is an indication of a sometimes frustrating talent -- chased a wide Broad delivery and edged to former England captain Alastair Cook at first slip.
Amla eventually paid the price for repeatedly mis-hooking when such a shot off Broad found Mark Wood at long leg.
It was a careless way for an experienced batsman -- this innings saw Amla become just the fourth South African to score 8,000 Test runs -- to get out.
Broad had now taken two wickets for three runs in 22 balls -- some way short of his stunning eight for 15 in Australia's 60 all out when England clinched the Ashes in their last Test at Trent Bridge two years ago, but important all the same.
All-rounder Ben Stokes then took two for four in 11 balls.
Du Plessis (19) was well-caught left-handed down the legside by diving wicket-keeper Jonny Bairstow off a thin glove.
The skipper reviewed but replays upheld the fine decision of on-field umpire Paul Reiffel.
But there was no doubt when Temba Bavuma (20) was caught behind off Stokes trying to leave the ball.
- 'Fill a gap' -
De Kock had at least justified his promotion to number four in place of the dropped JP Duminy.
"Faf asked where I would like to bat and I said that I would like to bat at four," wicket-keeper de Kock told reporters after what he said was an "up and down day".
"I've always liked to bat high up but the team make-up has never allowed me to.
"With this Test there were a few selection things that came up so I thought there was a gap there they might need me for."