Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- UITextView *tv = object;
- CGFloat topCorrect = ([tv bounds].size.height - [tv contentSize].height * [tv zoomScale])/2.0;
- topCorrect = ( topCorrect < 0.0 ? 0.0 : topCorrect );
- tv.contentOffset = (CGPoint){.x = 0, .y = -topCorrect}
- - (void) viewDidLoad {
- [textField addObserver:self forKeyPath:@"contentSize" options:(NSKeyValueObservingOptionNew) context:NULL];
- [super viewDidLoad];
- }
- -(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
- UITextView *tv = object;
- CGFloat topCorrect = ([tv bounds].size.height - [tv contentSize].height * [tv zoomScale])/2.0;
- topCorrect = ( topCorrect < 0.0 ? 0.0 : topCorrect );
- tv.contentOffset = (CGPoint){.x = 0, .y = -topCorrect};
- }
- -(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
- {
- UITextView *tv = object;
- CGFloat height = [tv bounds].size.height;
- CGFloat contentheight;
- if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"7")) {
- contentheight = [tv sizeThatFits:CGSizeMake(tv.frame.size.width, FLT_MAX)].height;
- NSLog(@"iOS7; %f %f", height, contentheight);
- }else{
- contentheight = [tv contentSize].height;
- NSLog(@"iOS6; %f %f", height, contentheight);
- }
- CGFloat topCorrect = height - contentheight;
- topCorrect = (topCorrect <0.0 ? 0.0 : topCorrect);
- tv.contentOffset = (CGPoint){.x = 0, .y = -topCorrect};
- }
- #define SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedAscending)
- static NSString *const kContentOffsetKeyPath = @"contentOffset";
- -(void)viewDidLoad {
- [self.replyTextView addObserver:self
- forKeyPath:kContentOffsetKeyPath
- options:(NSKeyValueObservingOptionNew)
- context:NULL];
- }
- - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
- if ([keyPath isEqualToString:kContentOffsetKeyPath]) {
- // To keep scrolling to bottom while typing and text content view is larger than maximum limit
- if (textView.contentSize.height > singleLineHeight) {
- UITextView *textView = object;
- CGFloat topCorrect = ([textView bounds].size.height - [textView contentSize].height * [textView zoomScale]) / 2.0;
- CGFloat fineTune = -3.0;
- topCorrect = (topCorrect < fineTune ? fineTune : topCorrect);
- // To avoid recursion
- [textView removeObserver:self forKeyPath:kContentOffsetKeyPath];
- textView.contentOffset = (CGPoint){.x = 0, .y = -topCorrect};
- // add observer back
- [textView addObserver:self
- forKeyPath:kContentOffsetKeyPath
- options:(NSKeyValueObservingOptionNew)
- context:NULL];
- }
- }
- }
- - (void)dealloc {
- [self.replyTextView removeObserver:self forKeyPath:kContentOffsetKeyPath];
- }
Add Comment
Please, Sign In to add comment