簡體   English   中英

當鍵盤顯示自動布局時,UIView不會向上移動

[英]UIView is not moving up when keyboard shown AutoLayout

當顯示鍵盤時,我的UIView不會向上移動;而在隱藏鍵盤時,我的UIView也不會消失。

該編碼在ViewDidLoad中

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

這個編碼是剩下的。

- (void)keyboardDidShow:(NSNotification *)note
{
    [self animateTextField:TRUE];
}

- (void)keyboardDidHide:(NSNotification *)note
{
    [self animateTextField:FALSE];
}

-(void)animateTextField :(BOOL)up
{
    const int movementDistance = -130; // tweak as needed
    const float movementDuration = 1.0; // tweak as needed

    int movement = (up ? movementDistance : - movementDistance);

    [UIView beginAnimations: @"animateTextField" context: nil];
    [UIView setAnimationBeginsFromCurrentState: YES];
    [UIView setAnimationDuration: movementDuration];
    _buttonsView.frame = CGRectOffset(_buttonsView.frame, 0, movement);
    [UIView commitAnimations];
}

我認為這適合您的實現:

-(void)animateTextField :(BOOL)up
{
    const int movementDistance = -130; // tweak as needed
    const float movementDuration = 1.0; // tweak as needed

    int movement = (moveUp ? movementDistance : - movementDistance);

    [UIView beginAnimations: @"animateTextField" context: nil];
    [UIView setAnimationBeginsFromCurrentState: YES];
    [UIView setAnimationDuration: movementDuration];
    _buttonsView.frame = CGRectOffset(_buttonsView.frame, 0, movement);
    [UIView commitAnimations];

    [_buttonsView setNeedsLayout];
}

編輯

我嘗試了您的代碼,並調用setNeedsLayout完成了工作。

使用自動布局,雖然不更改CGRect框架,但可以為約束常數設置動畫。 那是老方法。

請參閱此鏈接,我回答了一個類似的問題,即他們在使UIView的移動動畫化時遇到問題

使用layoutConstraints對UIView進行動畫處理

這應該會有所幫助,但是如果您需要任何澄清,請隨時讓我知道。

使用下面的代碼,您無需從任何地方調用它

#pragma mark - move view up when keyboard is displayed


- (void)textFieldDidBeginEditing:(UITextField *)textField
{
    [self animateTextField: textField up: YES];
}

- (void)textFieldDidEndEditing:(UITextField *)textField
{
    [self animateTextField: textField up: NO];
}

- (void) animateTextField: (UITextField*) textField up: (BOOL) up
{
    const int movementDistance = 80; // tweak as needed
    const float movementDuration = 0.3f; // tweak as needed

    int movement = (up ? -movementDistance : movementDistance);

    [UIView beginAnimations: @"anim" context: nil];
    [UIView setAnimationBeginsFromCurrentState: YES];
    [UIView setAnimationDuration: movementDuration];
    contentView.frame = CGRectOffset( contentView.frame, 0, movement);
    [UIView commitAnimations];
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM