I have a UIViewCOntroller that contains a UITextView . When the keyboard appears, I change it like this:
#pragma mark - Responding to keyboard events - (void)keyboardDidShow:(NSNotification *)notification { NSDictionary* info = [notification userInfo]; CGRect keyboardSize = [[info objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue]; CGRect newTextViewFrame = self.textView.frame; newTextViewFrame.size.height -= keyboardSize.size.height + 70; self.textView.frame = newTextViewFrame; self.textView.backgroundColor = [UIColor yellowColor]; } - (void)keyboardWillHide:(NSNotification *)notification { NSDictionary* info = [notification userInfo]; CGRect keyboardSize = [[info objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue]; CGRect newTextViewFrame = self.textView.frame; newTextViewFrame.size.height += keyboardSize.size.height - 70; self.textView.frame = newTextViewFrame; }
The TextView seems to have the correct meaning, but when the user enters the cursor, it ends โoutsideโ the textView frame. See the picture below:

The yellow area is the UITextView frame (I donโt know which blue line is next to the R key). I find it wired enough. I use iOS7 if that matters.
Any ideas or tips?
Update
I have a subclass of UITextView that draws horizontal lines with the following method (if that matters):
- (void)drawRect:(CGRect)rect { //Get the current drawing context CGContextRef context = UIGraphicsGetCurrentContext(); //Set the line color and width CGContextSetStrokeColorWithColor(context, [UIColor colorWithRed:229.0/255.0 green:244.0/255.0 blue:255.0/255.0 alpha:1].CGColor); CGContextSetLineWidth(context, 1.0f); //Start a new Path CGContextBeginPath(context); //Find the number of lines in our textView + add a bit more height to draw lines in the empty part of the view NSUInteger numberOfLines = (self.contentSize.height + rect.size.height) / self.font.lineHeight; CGFloat baselineOffset = 6.0f; //iterate over numberOfLines and draw each line for (int x = 0; x < numberOfLines; x++) { //0.5f offset lines up line with pixel boundary CGContextMoveToPoint(context, rect.origin.x, self.font.lineHeight*x + 0.5f + baselineOffset); CGContextAddLineToPoint(context, rect.size.width, self.font.lineHeight*x + 0.5f + baselineOffset); } // Close our Path and Stroke (draw) it CGContextClosePath(context); CGContextStrokePath(context); }
ios objective-c cocoa-touch uikeyboard uitextview
Anders Aug 25 '13 at 17:26 2013-08-25 17:26
source share