应用变为活动状态后,视图会调整为全屏

时间:2011-06-08 17:51:36

标签: iphone ios

我的情况:

我的视图底部有一个文本输入字段(最外面的视图不会滚动)。当有人聚焦输入时,我缩小视图以适应键盘(具体来说,我减去键盘的高度并将视图设置为新的高度)。

我的问题:

每当有什么东西从我的ViewController聚焦并在之后很快返回它(例如推送通知或有人点击主页按钮并稍后返回应用程序),视图似乎会自动调整大小以便文本输入返回在屏幕的底部,但是键盘仍在显示。

我想要的是什么:

我希望视图在app重新获得焦点之前保持其大小。键盘应保持显示状态,文本输入显示在其上方,而不是向下移动到键盘后面的屏幕底部。

有谁知道我可能做错了什么或我需要做些什么才能得到这种行为?

1 个答案:

答案 0 :(得分:0)

尝试此代码....

    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;
    static const CGFloat LANDSCAPE_KEYBOARD_HEIGHT = 162;



   - (void)textFieldDidBeginEditing:(UITextField *)textField
{

     CGRect textFieldRect =     [self.view.window convertRect:textField.bounds fromView:textField];

    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;
        }



        animatedDistance = floor(PORTRAIT_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)textFieldDidEndEditing:(UITextField *)textField
{

    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];
}

- (BOOL)textFieldShouldReturn:(UITextField *)textField
{

    [textField resignFirstResponder];
    return YES;
}
相关问题