Created
June 7, 2013 11:14
-
-
Save randomsequence/5728587 to your computer and use it in GitHub Desktop.
Resizing UIScrollView's contentInset & scrollIndicatorInsets properties to accommodate the keyboard.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// | |
// ContentViewController.m | |
// | |
// Created by Johnnie Walker on 07/06/2013. | |
// | |
#import "ContentViewController.h" | |
@interface ContentViewController () <UITableViewDataSource, UITableViewDelegate> | |
@property (nonatomic, weak) UITableView *tableView; | |
@end | |
NSString * const CellID = @"CellID"; | |
@implementation ContentViewController | |
- (void)loadView { | |
UITableView *tableView = [[UITableView alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame] style:UITableViewStylePlain]; | |
tableView.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth; | |
tableView.delegate = self; | |
tableView.dataSource = self; | |
[tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:CellID]; | |
self.view = tableView; | |
self.tableView = tableView; | |
} | |
- (void)viewDidAppear:(BOOL)animated { | |
[super viewDidAppear:animated]; | |
NSNotificationCenter *nc = [NSNotificationCenter defaultCenter]; | |
[nc addObserver:self | |
selector:@selector(keyboardWillShow:) | |
name:UIKeyboardWillShowNotification object:nil]; | |
[nc addObserver:self | |
selector:@selector(keyboardWillHide:) | |
name:UIKeyboardWillHideNotification object:nil]; | |
} | |
- (void)viewDidDisappear:(BOOL)animated { | |
[super viewDidDisappear:animated]; | |
NSNotificationCenter *nc = [NSNotificationCenter defaultCenter]; | |
[nc removeObserver:self | |
name:UIKeyboardWillShowNotification | |
object:nil]; | |
[nc removeObserver:self | |
name:UIKeyboardWillHideNotification | |
object:nil]; | |
} | |
#pragma mark - Keyboard | |
- (void)keyboardWillShow:(NSNotification*)aNotification { | |
NSDictionary* info = [aNotification userInfo]; | |
CGSize keyboardSize = [[info objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue].size; | |
UIEdgeInsets contentInsets = UIEdgeInsetsMake(0.0, 0.0, keyboardSize.height, 0.0); | |
NSTimeInterval duration = [[info objectForKey:UIKeyboardAnimationDurationUserInfoKey] doubleValue]; | |
[UIView animateWithDuration:duration | |
delay:0 | |
options:UIViewAnimationOptionBeginFromCurrentState | |
animations:^{ | |
self.tableView.contentInset = contentInsets; | |
self.tableView.scrollIndicatorInsets = contentInsets; | |
[self.tableView setNeedsDisplay]; | |
} | |
completion:nil]; | |
} | |
- (void)keyboardWillHide:(NSNotification*)aNotification { | |
UIEdgeInsets contentInsets = UIEdgeInsetsZero; | |
NSDictionary* info = [aNotification userInfo]; | |
NSTimeInterval duration = [[info objectForKey:UIKeyboardAnimationDurationUserInfoKey] doubleValue]; | |
[UIView animateWithDuration:duration | |
delay:0 | |
options:UIViewAnimationOptionBeginFromCurrentState | |
animations:^{ | |
self.tableView.contentInset = contentInsets; | |
self.tableView.scrollIndicatorInsets = contentInsets; | |
} | |
completion:nil]; | |
} | |
#pragma mark - UITableViewDataSource | |
-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { | |
return 10; | |
} | |
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { | |
return section; | |
} | |
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { | |
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellID]; | |
cell.textLabel.text = [NSString stringWithFormat:@"%i, %i", indexPath.section, indexPath.row]; | |
return cell; | |
} | |
@end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment