更改背景颜色BEHIND ViewController框架(当frame.origin被更改时)?

时间:2014-09-24 07:42:28

标签: objective-c uiview uiviewcontroller frame uiviewanimation

我有一个应用程序,可以为iPad打造客户端细节。当用户向UITextField的下半部分点击ViewController时,frame以编程方式向上移动,以便字段不会隐藏在键盘后面。 (我试图实现一个UIScrollView,但似乎无法让它工作。)我现在遇到的一个小问题是当frame向上移动时,你可以模糊地看到背后的黑色。这不是一个大问题,因为我改变了动画时间,黑色背景几乎看不到,但我觉得有更优雅的解决方案。

以下是我移动frame的代码:

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField {
    // Animate frame up if lower textfields are tapped
    if (([textField isEqual:_emailField]) || ([textField isEqual:_dobField]) || ([textField isEqual:_niNumField])) {
        [UIView beginAnimations:nil
                    context:NULL];
        [UIView setAnimationDuration:0.35f];
        CGRect frame = self.view.frame;
        frame.origin.y = -210;
        [self.view setFrame:frame];
        [UIView commitAnimations];
    } else {
        // Return frame to original position if other textfields are tapped
        [self dismissKeyboard];
    }
    return YES;
}

- (void)dismissKeyboard {
        [UIView beginAnimations:nil
                        context:NULL];
        [UIView setAnimationDuration:0.15f];
        CGRect frame = self.view.frame;
        frame.origin.y = 0;
        [self.view setFrame:frame];
        [UIView commitAnimations];
}

以下是我想要描述的内容的简短截图。左图是正常的ViewController,右图是frame向上移动的图片。你可以看到(含糊地)几乎与frame停止的第二行字符一致。

Left: Normal frame. Right: frame.origin.y altered

我意识到这似乎不是一个问题,因为它根本不可见,但我不得不加快隐藏键盘的动画,或者frame拖动后面的黑色背景变得可见。我想知道:有没有办法改变这种颜色?或者是我们无法访问的内容?如果有人能为我想做的事情提出更优雅的方法,我很乐意采取更好的解决方案。提前谢谢。

1 个答案:

答案 0 :(得分:0)

您的UIViewController视图已添加到主UIWindow。因此,您应该能够通过更改UIWindow的背景颜色来实现您想要的效果。

UIApplicationDelegate

self.window.backgroundColor = [UIColor whiteColor];

但是,您所做的并不是解决键盘覆盖文本字段问题的最佳方法。您应该使用UIScrollViewUITableView来管理此视图,并使用内容插入来向上或向下移动视图。