将显示如何使用键盘修改UICollectionView动画



当单元格包含文本字段并成为第一响应者时,标准行为是自动设置集合视图的内容偏移量,以防止隐藏文本字段。

为什么键盘出现时UICollectionView偏移量发生变化

这是自动发生的,是意料之中的行为。

当键盘出现时,我如何自定义单元格向上的动画?

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

有了这个,你可以相应地切换UICollectionView的高度

您应该实现UIScrollViewDelegate和UITextFieldDelegate并添加:

- (void)viewDidLoad 
{    
   [self addNotificationObserver];
}
-(void)viewWillDisappear:(BOOL)animated
{
    [super viewWillDisappear:animated];
    [self removeObservers];
}

 -(void)addNotificationObserver
{
    [[NSNotificationCenter defaultCenter] addObserver:self
                                          selector:@selector(keyboardWillShow:)
                                              name:UIKeyboardWillShowNotification
                                            object:nil];
    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(keyboardWillHide:)
                                                 name:UIKeyboardWillHideNotification
                                               object:nil];
 }
- (void)keyboardWillShow:(NSNotification *)notification
{
    CGSize keyboardSize = [[[notification userInfo] objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size;
    [UIView animateWithDuration:0.1 animations:^{
                    CGRect f = self.view.frame;
                    f.origin.y = -keyboardSize.height;
                    self.view.frame = f;
                }];
  }
-(void)keyboardWillHide:(NSNotification *)notification
{
      [UIView animateWithDuration:0.1 animations:^{
                    CGRect f = self.view.frame;
                    f.origin.y = 0.0f;
                    self.view.frame = f;
                }];
}
-(void)removeObservers 
{
    [[NSNotificationCenter defaultCenter] removeObserver:self name:@"UIKeyboardWillShowNotification" object:nil];
    [[NSNotificationCenter defaultCenter] removeObserver:self name:@"UIKeyboardWillHideNotification" object:nil];
}

最新更新