Не уверен, что это ответ, но он работает.
В 3.1.3 с исходным кодом курсор был в конце, но прокрутка была вверху. В 4.0 оба были внизу.
NSUInteger length = self.textView.text.length;
self.textView.selectedRange = NSMakeRange(length, 0);
Затем я заметил, что в 3.1.3, переключая 0 и длину, прокрутка была внизу, но курсор был вверху.
NSUInteger length = self.textView.text.length;
self.textView.selectedRange = NSMakeRange(0, length);
Соединение двух работало. Он прокручивается до нижнего NSMakeRange (0, length), предположительно до конца диапазона, затем NSMakeRange (length, 0) помещает курсор туда, и все без изменений, что он делает в 4.0
NSUInteger length = self.textView.text.length;
self.textView.selectedRange = NSMakeRange(0, length);
self.textView.selectedRange = NSMakeRange(length, 0);