Я не программист Objective-C (на самом деле я вообще не знаю Objective-C :-), но мне тоже нужно было это сделать (в моем веб-приложении, работающем на iPad в WebView),поэтому с «маленькой» помощью Google я сделал это:
- (void)init {
[[NSNotificationCenter defaultCenter]
addObserver:self
selector:@selector(keyboardWillShow:)
name:UIKeyboardWillShowNotification object:nil];
}
- (void)keyboardWillShow:(NSNotification *)aNotification {
float x = self.webView.scrollView.bounds.origin.x;
float y = self.webView.scrollView.bounds.origin.y;
CGPoint originalOffset = CGPointMake(x, y);
for (double p = 0.0; p < 0.1; p += 0.001) {
[self setContentOffset:originalOffset withDelay:p];
}
}
- (void)setContentOffset:(CGPoint)originalOffset withDelay:(double)delay {
double delayInSeconds = delay;
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC));
dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
[self.webView.scrollView setContentOffset:originalOffset animated:NO];
});
}
Я знаю, что это не лучшее решение - но оно работает.С точки зрения общего программирования (я не знаю Objective-C), я думаю, что возможно будет перезаписать метод setContentOffset класса UIScrollView и реализовать ваше собственное поведение (и, возможно, вызов супер-метода родителя).