Move up keyboard when editing UITextField on iOS9

后端 未结 7 1390
太阳男子
太阳男子 2021-02-02 00:03

For my keyboards to move up to uncover UITextField in my iOS app, I used to implement this answer: https://stackoverflow.com/a/6908258/3855618 on iOS7 and 8 and it

7条回答
  •  暖寄归人
    2021-02-02 00:25

    Try this code that I have used in my previous projects:

    - (void)textFieldDidBeginEditing:(UITextField *)textField
    {
        [self didBeginEditingIn:textField];
    }
    
    - (void)textFieldDidEndEditing:(UITextField *)textField
    {
        [self didEndEditing];
    }
    
    
    static const CGFloat KEYBOARD_ANIMATION_DURATION = 0.3;
    static const CGFloat MINIMUM_SCROLL_FRACTION = 0.2;
    static const CGFloat MAXIMUM_SCROLL_FRACTION = 0.8;
    static const CGFloat PORTRAIT_KEYBOARD_HEIGHT = 216+100;
    static const CGFloat LANDSCAPE_KEYBOARD_HEIGHT = 162+100;
    
    - (void)didBeginEditingIn:(UIView *)view
    {
        CGRect textFieldRect = [self.view.window convertRect:view.bounds fromView:view];
        CGRect viewRect = [self.view.window convertRect:self.view.bounds fromView:self.view];
    
        CGFloat midline = textFieldRect.origin.y + 0.5* textFieldRect.size.height;
        CGFloat numerator = midline - viewRect.origin.y- MINIMUM_SCROLL_FRACTION * viewRect.size.height;
        CGFloat denominator = (MAXIMUM_SCROLL_FRACTION - MINIMUM_SCROLL_FRACTION)* viewRect.size.height;
        CGFloat heightFraction = numerator / denominator;
    
        if (heightFraction < 0.0)
        {
            heightFraction = 0.0;
        }
        else if (heightFraction > 1.0)
        {
            heightFraction = 1.0;
        }
    
        UIInterfaceOrientation orientation =
        [[UIApplication sharedApplication] statusBarOrientation];
        if (orientation == UIInterfaceOrientationPortrait ||
            orientation == UIInterfaceOrientationPortraitUpsideDown)
        {
            _animatedDistance = floor(PORTRAIT_KEYBOARD_HEIGHT * heightFraction);
        }
        else
        {
            _animatedDistance = floor(LANDSCAPE_KEYBOARD_HEIGHT * heightFraction);
        }
    
        CGRect viewFrame = self.view.frame;
        viewFrame.origin.y -= _animatedDistance;
    
        [UIView beginAnimations:nil context:NULL];
        [UIView setAnimationBeginsFromCurrentState:YES];
        [UIView setAnimationDuration:KEYBOARD_ANIMATION_DURATION];
    
        [self.view setFrame:viewFrame];
    
        [UIView commitAnimations];
    }
    
    - (void)didEndEditing
    {
        CGRect viewFrame = self.view.frame;
        viewFrame.origin.y += _animatedDistance;
    
        [UIView beginAnimations:nil context:NULL];
        [UIView setAnimationBeginsFromCurrentState:YES];
        [UIView setAnimationDuration:KEYBOARD_ANIMATION_DURATION];
    
        [self.view setFrame:viewFrame];
    
        [UIView commitAnimations];
    }
    

提交回复
热议问题