I have several UITextFields
in a UIScrollView
. When I edit one of them and the keyboard pops-up, the field is covered by the keyboard.
I would like to scroll up the view, I thought this was automatically done by iOS but it seems not to be the case.
I'm currently using this method to scroll the view, but it doesn't work very well.
- (void)scrollToView:(UIView *)view
{
CGRect viewFrame = [[edit scrollView] convertRect:[view frame] fromView:[view superview]];
CGRect finalFrame = CGRectMake(viewFrame.origin.x, viewFrame.origin.y, viewFrame.size.width, (viewFrame.size.height + (inputAccessory.frame.size.height) + 4.0));
[[edit scrollView] scrollRectToVisible:finalFrame animated:YES];
}
thanks
In my case, what I do is reduce the size of the scrollView
in the Editing Did Begin
event of the UITextField
, like this:
- (IBAction)didEnterInTextField:(id)sender
{
[sender becomeFirstResponder];
// Resize the scroll view to reduce the keyboard height
CGRect scrollViewFrame = self.scrollView.frame;
if (scrollViewFrame.size.height > 300) {
scrollViewFrame.size.height -= 216;
self.scrollView.frame = scrollViewFrame;
}
// Scroll the view to see the text field
UITextField *selectedTextField = (UITextField *)sender;
float yPosition = selectedTextField.frame.origin.y - 60;
float bottomPositon = self.scrollView.contentSize.height - self.scrollView.bounds.size.height;
if (yPosition > bottomPositon) {
yPosition = bottomPositon;
}
[self.scrollView setContentOffset:CGPointMake(0, yPosition) animated:YES];
}
Here is nice tutorial on same
http://www.iphonesampleapps.com/2009/12/adjust-uitextfield-hidden-behind-keyboard-with-uiscrollview/
Hope it helps you
Try this sample code TPKeyboardAvoiding
Its easy to implement. Just drag and drog the custom classes and change the Custom class from UIScrollview to TPKeyboardAvoidingScrollView
in the xib
// register for keyboard notifications
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(keyboardWillShow:)
name:UIKeyboardWillShowNotification
object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(keyboardWillHide:)
name:UIKeyboardWillHideNotification
object:nil];
set the frame of scroll view in these two methods.. when keyboards shows or hides.
or set the scrollRectToVisible of scroll view
- (void)scrollViewToCenterOfScreen:(UIView *)theView
{
CGFloat viewCenterY = theView.center.y;
CGFloat availableHeight;
CGFloat y;
if(!isReturned)
{
if (UI_USER_INTERFACE_IDIOM()==UIUserInterfaceIdiomPad)
{
availableHeight = 1080;
}
else
{
availableHeight = 220;
}
}
else
{
if (UI_USER_INTERFACE_IDIOM()==UIUserInterfaceIdiomPad)
{
availableHeight = 1400;
}
else
{
availableHeight = 530;
}
}
y = viewCenterY - availableHeight / 2.0;
if (y < 0) {
y = 0;
}
[sclView setContentOffset:CGPointMake(0, y) animated:YES];
}
Call this method in textfield or textview begin editing.It will works.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.