+5  A: 

This is how UITextView behaves according to Apple's engineer this is intended and UITextView is meant for text that are at least a few lines in height. There is no work around to this, use a UITextField instead or increase your UITextView to at least 3 lines in height.

erotsppa
Thanks. I increased the high to 55 and with a fontsize of 12 it now works as I want.
Gero
+18  A: 

UITextView is a subclass of UIScrollView, so it has a configurable contentInset property. Unfortunately, if you try to change contentInset on a UITextView instance, the bottom edge inset always gets reset to 32. I've run into this before with short UITextView frames and found this to be an issue. I suspect this is what is causing your problem, but you should check the contentInset of your textview in the debugger to be sure.

The workaround/solution is simple: subclass UITextView and override the contentInset method so that it always returns UIEdgeInsetZero. Try this:

//
// BCTextView
//
// UITextView seems to automatically be resetting the contentInset
// bottom margin to 32.0f, causing strange scroll behavior in our small
// textView.  Maybe there is a setting for this, but it seems like odd behavior.
// override contentInset to always be zero.
//
@interface BCZeroEdgeTextView : UITextView
@end

@implementation BCZeroEdgeTextView

- (UIEdgeInsets) contentInset { return UIEdgeInsetsZero; }

@end
Brian Chapados
Thank you, works great for me.
Eugene
And me, just what I was looking for.
Daniel Wood
you are D man!!!! thanks!!!!!!!!!!
Digital Robot
the autocorrection bubble will not be able to be visible when typing on first row when you do like this.
f0rz
Great answer! BTW, you can also just do textView.contentInset = UIEdgeInsetsZero; if you dont want to subclass. :)
Chintan Patel
This is awesome, thank you so much.
jboxer
A: 

Brian's answer to subclass the UITextView worked great for me! I'm so happy to have finally found a solution for a single line UITextView. (A UITextField in a table cell was causing strange problems for me when the view was popped off the nav bar.)

Ernie Thomason
A: 

The subclass method works fine.

textView.contentInset = UIEdgeInsetsZero;

That doesn't seem to do anything.

I'd much rather NOT subclass... but how?

Sally