UITextView keyboardDismissMode错误

我刚刚发现了一个恼人的错误与scroll view的新keyboardDismissMode属性。 当在text view使用UIScrollViewKeyboardDismissModeInteractive并将其与键盘关联时, scroll view似乎跳到顶部,然后继续减速。

我已经提交了一个苹果的错误报告,但需要一个解决方法。 我已经尝试了DAKeyboardControl没有新的iOS7支持,幕后使用keyboardDismissMode ,它仍然做到这一点,这表明这是一个更深的问题。

有什么build议么?

对于这个问题,你最好使用scrollviewDelegete进行编码,并简单地提及何时需要通过ResignFirstResponderclosures键盘

似乎是一个错误或只是一个非理想的默认状态。 但是根据testing项目中的代码,在进行一些更好的调整之后,下面的代码可能会工作。

示例代码有两个问题,一个是当键盘出现时你没有做任何有关文本大小的事情,所以你不能使用或看到键盘下的文本。 还有其他的解决scheme,但一个快速和肮脏的解决scheme是改变框架的大小(在提交应用程序,我也将抓住animation信息和animation视图框架的变化,以配合键盘animation超出了这个问题的范围)。 你用“willShow”或类似的方法做到这一点,然后把它带回“didHide”之类。

然后,内容偏移量被隐藏,当它被隐藏在屏幕之前和之后,隐藏和滚动视图更改时,出现一些奇怪的状态。 我只保存状态并在键盘消失后“修复”状态,并更新了文本视图。

我在故事板上创build了一些属性和插口,以便与文本视图相配合。

 - (void)viewDidLoad
 {
     [super viewDidLoad];

     [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow :) name:UIKeyboardWillShowNotification object:nil];

     [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardDidHide :) name:UIKeyboardDidHideNotification object:nil];
 }

 - (void)keyboardWillShow:(NSNotification *)通知
 {
     NSDictionary *信息= [通知userInfo];
     CGSize size = [[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue] .size;

     CGRect rect = self.textView.frame;
     rect.size.height  -  = size.height;
     self.textView.frame = rect;
 }

 - (void)keyboardDidHide:(NSNotification *)通知
 {
     NSLog(@“====== keyboardDidHide =======”);

     NSDictionary *信息= [通知userInfo];
     CGSize size = [[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue] .size;

     CGRect rect = self.textView.frame;
     rect.size.height + = size.height;
     self.textView.frame = rect;


     self.hidingKeyboard = YES;
 }

 - (void)scrollViewDidScroll:(UIScrollView *)scrollView
 {
     NSLog(@“%f”,scrollView.contentOffset.y);
    如果(self.hidingKeyboard == YES)
     {
         scrollView.contentOffset = self.lastOffset;
         self.hidingKeyboard = NO;
         NSLog(@“====== reset =======”);
     }
    其他
         self.lastOffset = scrollView.contentOffset;
 }