使用导航栏和UITextField时出现问题

时间:2015-05-19 05:50:14

标签: ios css objective-c uinavigationcontroller uitextfield

我面临一个奇怪的问题。

我有三个UITextField,当键盘与屏幕重叠时,我正在使用代码向上移动屏幕:

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

   if(self.view.frame.size.height==568  && textField==txtVerifyPassword)
 {
    [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationDelegate:self];
    [UIView setAnimationDuration:0.5];
    [UIView setAnimationBeginsFromCurrentState:YES];
    self.view.center = CGPointMake(originalCenter.x,originalCenter.y-100);
}
else if(self.view.frame.size.height==568  && textField==txtPassword)
{
    [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationDelegate:self];
    [UIView setAnimationDuration:0.5];
    [UIView setAnimationBeginsFromCurrentState:YES];
    self.view.center = CGPointMake(originalCenter.x,originalCenter.y-20);
}
 }

我正在使用:

移至原始位置
- (void)textFieldDidEndEditing:(UITextField *)textField{
   self.view.center = CGPointMake(originalCenter.x,originalCenter.y);
  }

DidLoad的原创中心:

  - (void)viewDidLoad {
   [super viewDidLoad];
  originalCenter = self.view.center;

// Do any additional setup after loading the view.
 }

我正在以这样的方式添加导航栏:

     [self.navigationController setNavigationBarHidden:NO];
   self.navigationItem.title = @"Demo";
   UIColor *bg = [UIColor colorWithRed:9/255.0f green:161/255.0f      blue:12/255.0f alpha:1.0f];

if (floor(NSFoundationVersionNumber) <= NSFoundationVersionNumber_iOS_6_1) {
    // iOS 6.1 or earlier
    self.navigationController.navigationBar.tintColor = bg;
    self.navigationController.navigationBar.titleTextAttributes = @{NSForegroundColorAttributeName: [UIColor whiteColor]};

} else {
    // iOS 7.0 or later
    self.navigationController.navigationBar.barTintColor = bg;
    self.navigationController.navigationBar.translucent = NO;
    self.navigationController.navigationBar.tintColor = [UIColor whiteColor];
    self.navigationController.navigationBar.titleTextAttributes = @{NSForegroundColorAttributeName: [UIColor whiteColor]};
}

当我删除导航时,每件事情都很有效。

但是当我添加它时,我遇到了两个问题:

  1. 底部的额外黑色空间(视图不会回到其原始位置)
  2. 当我向上或向下滑动导航栏隐藏(不知道为什么会发生这种情况)

1 个答案:

答案 0 :(得分:2)

只需使用TPKeyboardAvoidingScrollView就可以了。它简单易用。你可以很容易地实现你想要实现的目标。

用法:

UITableViewController课程同时使用,将TPKeyboardAvoidingTableView.mTPKeyboardAvoidingTableView.h放入您的项目中,然后将UITableView设为TPKeyboardAvoidingTableView在xib中。

如果您没有在控制器上使用xib,我知道没有简单的方法可以使UITableView成为自定义类:阻力最小的路径是为它创建一个xib。

对于非 - UITableViewControllers,将TPKeyboardAvoidingScrollView.mTPKeyboardAvoidingScrollView.h源文件放入项目中,将UIScrollView弹出到视图控制器的xib中,将滚动视图的类设置为TPKeyboardAvoidingScrollView,并将所有控件放在该滚动视图中。

您也可以不使用xib以编程方式创建它 - 只需使用TPKeyboardAvoidingScrollView作为顶级视图。