2016-10-19 12 views
1

Я использую IQKeyboardManager, чтобы сохранить текстовые поля после ввода с клавиатуры.Сохранять представление всегда сверху (не прокручивать клавиатуру) в IQKeyboardManager

Я не хочу прокручивать изображение до определенного вида даже при нажатии на текстовое поле. Ниже приведен снимок экрана. Я хочу, чтобы заголовок оставался на вершине.

inspector layout for the view

Из их документации, there is a way to keep the navigation bar remain on top.

+0

IQKeyboardManager отвечает за полную видимость вашего TextField/TextView. Поэтому, чтобы сделать видимым текстовое поле, он переместит вид вверх. – Wolverine

+0

Я бы предположил, что для достижения этой функциональности отключите IQKeyboardmanager для этого контроллера вида и вручную переместите текстовое поле вверх, когда появится клавиатура. – Wolverine

+0

Я новичок в этом. Вот почему я выбрал эту библиотеку. Ни за что? –

ответ

2

Попробуйте это. Отключите IQKeyboardManager для этого viewController.

для того,

IQKeyboardManager.sharedManager().disableInViewControllerClass(your view controller class name here) 

И в этом ViewController записи следующего кода. Он будет двигаться ваш взгляд вверх, как на высоте клавиатуры

override func viewDidLoad() { 
     super.viewDidLoad() 

     NotificationCenter.default.addObserver(self, selector: #selector(Login.keyboardWillShow), name: NSNotification.Name.UIKeyboardWillShow, object: nil) 
     NotificationCenter.default.addObserver(self, selector: #selector(Login.keyboardWillHide), name: NSNotification.Name.UIKeyboardWillHide, object: nil) 

} 

func keyboardWillShow(notification: NSNotification) { 

     if let keyboardSize = (notification.userInfo?[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue { 
      if self.view.frame.origin.y == 0{ 
      self.view.frame.origin.y -= keyboardSize.height 
     } 
     } 

    } 

func keyboardWillHide(notification: NSNotification) { 
     if let keyboardSize = (notification.userInfo?[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue { 
      if self.view.frame.origin.y != 0{ 
      self.view.frame.origin.y += keyboardSize.height 
     } 
     } 
    } 

Теперь вы хотите, чтобы ваши "HEADER" вид остается на вершине то,

Делай так:

**

YourViewController.view -> [headerView] [contentView]

**

Put TextField в [contentView] И изменить [contentView] .y вместо self.view в коде выше.

+0

Что такое 'login' здесь? –

+0

@GijoVarghese Замените 'login' своим именем' ViewController'. –

+0

Да. Это работало. Но проблема в том, что, щелкая текстовое поле, все на экране увеличивается. Включение вида сверху. Можно ли всегда держать этот вид сверху? –

1

Отключить IQKeyboardManager для вашего viewController:

override func viewWillAppear(animated: Bool) { 
     super.viewWillAppear(animated) 
     IQKeyboardManager.sharedManager().enable = false 

     NotificationCenter.default.addObserver(self, selector: #selector(Login.keyboardWillShow), name: NSNotification.Name.UIKeyboardWillShow, object: nil) 
     NotificationCenter.default.addObserver(self, selector: #selector(Login.keyboardWillHide), name: NSNotification.Name.UIKeyboardWillHide, object: nil) 
} 

ручки клавиатуры:

func keyboardWillShow(notification: NSNotification) { 

     if let keyboardSize = (notification.userInfo?[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue { 
      if self.view.frame.origin.y == 0{ 
      self.table_view.frame.origin.y -= keyboardSize.height 
      } 
     } 
    } 

func keyboardWillHide(notification: NSNotification) { 
     if let keyboardSize = (notification.userInfo?[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue { 
      if self.view.frame.origin.y != 0{ 
      self.table_view.frame.origin.y += keyboardSize.height 
      } 
     } 
    } 

Удалить наблюдатель:

override func viewWillDisappear(animated: Bool) { 
     IQKeyboardManager.sharedManager().enable = true 
     NSNotificationCenter.defaultCenter().removeObserver(self)  
    }