Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to stop UITextView from scrolling up when entering it

I have a UITextView included in a UITableViewCell. The layout is correct when the views are initially displayed, but once I click in the UITextView it automatically scrolls up a bit and the top half of the characters on the first line becomes invisible.

This image is when the UITextView is not active:
UITextView not active http://gerodt.homeip.net/uitextview-notactive.png

And this one is when I clicked in the UITextView to make it active:
UITextView active http://gerodt.homeip.net/uitextview-active.png

I do not the UITextView to scroll up at all, it should simple stay fixed. How can I achieve this? I already tried several settings in Interface Builder, but no luck so far.

Any suggestions are appreciated.

Gero

like image 385
Gero Avatar asked Jul 24 '09 14:07

Gero


2 Answers

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  
like image 116
Brian Chapados Avatar answered Sep 22 '22 13:09

Brian Chapados


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.

like image 32
erotsppa Avatar answered Sep 21 '22 13:09

erotsppa