Ohio State was also hurt by a targeting penalty on Nick Bosa that saw him ejected from the game and turned a failed third-down conversion into a first down for the Hawkeyes midway through the second quarter.
The hosts capitalized on the next play as Nate Stanley hooked up with Noah Fant for a 25-yard touchdown pass.
That made it 24-17, and Iowa never trailed again.
On the ensuing Ohio State possession, Iowa cornerback Josh Jackson stepped in front of Ohio State’s Marcus Baugh for an interception he returned to the OSU 22.
Iowa capitalized three plays later when Stanley hooked up with Fant again for a touchdown, this time from three yards out.
That all came after Iowa safety Amani Hooker returned a Barrett pass 30 yards for a touchdown on the first play from scrimmage.
Ohio State’s beleaguered defense forced two Iowa punts to start the third quarter, but the Buckeye could not gain a first down after either.
Then Iowa put together a backbreaking 78-yard touchdown drive that included a successful fake punt and a key pass interference penalty.
Stanely capped it with a 2-yard touchdown pass to T.J. Hockenson.
From there it was all academic, but the Hawkeyes kept piling on anyway.
Stanley found Drake Kulick for another 2-yard touchdown on the first play of the fourth quarter, and Miguel Recenos added a 30-yard field goal with 13:16 left.