Метод scrollRectToVisible: делает правильные вещи. Он прокручивает представление до точки, где указанный CGRect находится в видимой части представления. Но , вот в чем дело - вы размещаете другой вид поверх вида прокрутки, поэтому часть видимой области вида прокрутки скрыта. Представление прокрутки не знает об этом, оно знает только о видимом разделе, не зависящем от других представлений.
Решением этой проблемы может быть смещение вашего textFieldRect CGRect на заданную величину, чтобы представление прокрутки прокручивалось немного дальше в заданном направлении. Вы можете, например, использовать размер экранной клавиатуры для вычисления этого смещения или, возможно, размер полупрозрачного вида, который можно увидеть на скриншоте?