Reputation: 9820
[Edit:] The problem has been solved. I did not have my delegates linked properly in UIBuilder
. Code is good!
I am trying to resize a scrollview when the keyboard appears. I went to the developer docs and found this information.
On the left "Managing the keyboard".
In the documentation it shows a bit of code to detect the size of the keyboard and then to resize a UIScrollView
. I have placed an NSLog
message in the code for function - (void)keyboardWasShown:(NSNotification*)aNotification
so I see that the function is actually being called, but when I try to to NSLog
the kbSize
.height it is always valued at 0.
Why does the code that apple provide for this purpose not work?
- (void)keyboardWasShown:(NSNotification*)aNotification
{
NSDictionary* info = [aNotification userInfo];
CGSize kbSize = [[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size;
UIEdgeInsets contentInsets = UIEdgeInsetsMake(0.0, 0.0, kbSize.height, 0.0);
scrollView.contentInset = contentInsets;
scrollView.scrollIndicatorInsets = contentInsets;
// If active text field is hidden by keyboard, scroll it so it's visible
// Your application might not need or want this behavior.
CGRect aRect = self.view.frame;
aRect.size.height -= kbSize.height;
if (!CGRectContainsPoint(aRect, activeField.frame.origin) ) {
CGPoint scrollPoint = CGPointMake(0.0, activeField.frame.origin.y-kbSize.height);
[scrollView setContentOffset:scrollPoint animated:YES];
}
}
Upvotes: 15
Views: 23941
Reputation: 10422
One simple solution is to add the extension UIViewController+Keyboard.swift to your project, with a single line
setupKeyboardNotifcationListenerForScrollView(scrollView)
it will auto resize automatically when keyboard appears. No need to subclass anything, just an extension! Its availble at GitHub SingleLineKeyboardResize
Upvotes: 0
Reputation: 23213
I've done this several times with a UITableView
(which is just an extended UIScrollView
). You can find the code in this answer.
Upvotes: 0
Reputation: 2132
You may want to try the highly recommended "TPKeyboardAvoidingScrollView", available from: https://github.com/michaeltyson/TPKeyboardAvoiding
Works like a charm...
Upvotes: 33
Reputation: 7663
Have you ever added an observer for that specific notification? Make sure that in your loadView
method you do this:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWasShown:) name:UIKeyboardDidShowNotification object:nil];
Don't forget to unregister the observer on viewDidUnload
method like this:
[[NSNotificationCenter defaultCenter] removeObserver:self];
Let me know if that works out!
Upvotes: 3