Как переместить текстовое поле вверх в соответствии с iPhone. размеры в быстром - PullRequest
1 голос
/ 18 октября 2019

Я разработал экран, используя ограничения раскадровки для iPhone XR. если я запускаю это на iPhone7, то клавиатура скрывает текстовые поля ... поэтому у меня есть код возврата для текстового поля, когда клавиатура появляется ... но здесь текстовое поле увеличивается для всех размеров iPhone ... здесь я хочу переместить текстовое поле вверх, в то время как клавиатура вводится в соответствии с экраномразмер. как?

вот мой код:

 func animateViewMoving (up:Bool, moveValue :CGFloat){
    let movementDuration:TimeInterval = 0.3
    let movement:CGFloat = ( up ? -moveValue : moveValue)
    UIView.beginAnimations( "animateView", context: nil)
    UIView.setAnimationBeginsFromCurrentState(true)
    UIView.setAnimationDuration(movementDuration )
    self.view.frame = self.view.frame.offsetBy(dx: 0,  dy: movement)
    UIView.commitAnimations()
}

func textFieldDidBeginEditing(_ textField: UITextField) {        
    if  textField == self.self.conformPasswordTextField {
        animateViewMoving(up: true, moveValue: 60)
    }
}  

func textFieldDidEndEditing(_ textField: UITextField) {

    if  textField == self.self.conformPasswordTextField {
        animateViewMoving(up: false, moveValue: 60)
    }
 }

Как переместить текстовое поле вверх по размерам iPhone.

Пожалуйста, помогите мне в коде.

Ответы [ 2 ]

0 голосов
/ 18 октября 2019

Если вы не хотите использовать автоматическое расположение и хотите, чтобы текстовое поле увеличивалось при появлении клавиатуры, используйте UIScrollView .

и используйте следующий код. убедитесь, что вы изменили его в соответствии с вашими текстовыми полями, вызовите эту функцию registerforkeyboardnotifications из вашей viewdidload

  lazy var securityScrollView = UIScrollView()
 var activeTextField = UITextField()
  var testTextField = UITextField()

 //call setup screen from viewdidload
func setUpScreen {

  view.addSubview(securityScrollView)

  // adding textfield to scroll view
  securityScrollView.addSubview(testTextField)

  // make sure to setup constraints. for textfield and scrollview

}


  /// here I am setting my activekeyboard
    public func textFieldDidBeginEditing(_ textField: UITextField) {

    activeTextField = textField
}

 func registerForKeyboardNotifications() {

    NotificationCenter.default.addObserver(self, selector: #selector(onKeyboardAppear(_:)), name: UIResponder.keyboardDidShowNotification, object: nil)
    NotificationCenter.default.addObserver(self, selector: #selector(onKeyboardDisappear(_:)), name: UIResponder.keyboardDidHideNotification, object: nil)
}

 @objc func onKeyboardAppear(_ notification: NSNotification) {

    let info = notification.userInfo!
    let rect: CGRect = info[UIResponder.keyboardFrameBeginUserInfoKey] as! CGRect
    let kbSize = rect.size
    let insets = UIEdgeInsets(top: 0, left: 0, bottom: kbSize.height+120, right: 0) // bottom constants change according to your needs
    self.securityScrollView.contentInset = insets
    self.securityScrollView.scrollIndicatorInsets = insets
    var visibleRect: CGRect = self.securityScrollView.convert(self.securityScrollView.bounds, to: self.view)
    visibleRect.size.height -= rect.size.height;
    let inputRect: CGRect = self.activeTextField.convert(self.activeTextField.bounds, to: self.securityScrollView)
    if (visibleRect.contains(inputRect)) {
        self.securityScrollView.scrollRectToVisible(inputRect, animated: true)
    }
}

@objc func onKeyboardDisappear(_ notification: NSNotification) {

    self.securityScrollView.contentInset = UIEdgeInsets.zero
    self.securityScrollView.scrollIndicatorInsets = UIEdgeInsets.zero
}

убедитесь, что вы удаляете наблюдателя, и лучшее место для этого - deist, если выиспользование контроллера вида

 deinit {
    NotificationCenter.default.removeObserver(self, name: UIResponder.keyboardDidShowNotification, object: nil)
    NotificationCenter.default.removeObserver(self, name: UIResponder.keyboardDidHideNotification, object: nil)
}

Если вы хотите настроить прокрутку, обратитесь к этому

 public override func viewWillLayoutSubviews() {

    super.viewWillLayoutSubviews()
    securityScrollView.contentSize = CGSize(width: self.view.frame.width, height: self.view.frame.height + kPaddig)
    securityScrollView.isScrollEnabled = true
    securityScrollView.showsVerticalScrollIndicator = false
}

изменить активное текстовое поле для вашего текстового поля

 var activeTextField = UITextField()

Внесите изменения в соответствии сВаш прокрутка и учебник. Наслаждайтесь!

0 голосов
/ 18 октября 2019

Лучший способ проектирования и разработки приложений - ВСЕГДА разрабатывать приложения на МАЛЕНЬКОМ размере экрана. Масштабировать приложения всегда проще, чем уменьшать приложение.

Исходя из вашего вопроса, вы хотите (другие способы сделать это) создать переменные, которые включают в себя все размеры экрана по ширине и высоте, и установить высоту каждого объекта шириной и так далее в соответствии с экраномразмер.

Это не лучшая практика. Лучший способ сделать это - использовать «варьировать черты» на плате XCode Story. Что такое Vary for Traits в Xcode 8? Ссылка на этот вопрос выше - хорошее место для начала.

Однако я рекомендую изменить дизайн приложения, чтобы оно соответствовало наименьшему размеру экрана ios, который вы готовы поддерживать.

Как я уже говорил, всегда гораздо проще увеличить масштаб, чем уменьшить и увеличить

...