2017-02-21 2 views
1

테이블 뷰의 맨 아래에있는 텍스트 상자를 슬라이드하려고합니다 (실제로는 바닥 글보기에 있음). 그래서이 두 가지 방법을 시도 :키보드가 나타날 때 테이블 뷰 슬라이딩

  1. 이 자동 레이아웃 제약에게있는 tableview 여전히

  • 애니메이션 콘텐츠 세트를 애니메이션을, 그 비는 일, 또는 부분적으로 일했다. 현재, 난 진짜 아이 패드 (응용 프로그램은 아이 패드 전용입니다)에서이를 테스트 할 수 없습니다와 나는 시뮬레이터에서 테스트하고 있지만이 같은 일을해야 생각 :

    1. 애니메이션 contentInsets

      func keyboardWillShow(notification: NSNotification) { 
          if let keyboardHeight = (notification.userInfo?[UIKeyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue.height { 
           UIView.animate(withDuration: 0.2, animations: { 
            self.tableView.contentInset = UIEdgeInsetsMake(0, 0, keyboardHeight, 0) 
           }) 
          } 
      } 
      
      func keyboardWillHide(notification: NSNotification) { 
          UIView.animate(withDuration: 0.2, animations: { 
           self.tableView.contentInset = UIEdgeInsetsMake(0, 0, 0, 0) 
          }) 
      } 
      
    2. 에 애니메이션 자동 레이아웃 제약

    그래서 첫 번째 예에서, 내가 몰랐 animati on 또는 tableview content moving. 두 번째 예제에서는 자동 레이아웃 제약 조건 (맨 아래 수직 간격)의 콘센트를 만들었지 만 이상한 결과가 나타납니다. 예를 들어, tableview는 완전히 움직이지는 않지만 처음으로 움직입니다.

    중단 점을 넣으면 keyboardHeight471과 같습니다. 나는 명백한 것을 놓치고 있습니까?

  • +0

    사용 [IQKeyboardManager] (https://github.com/hackiftekhar/IQKeyboardManager#installation- with-cocoapod-) – pkc456

    +0

    @ pkc456 죄송합니다. 제 3 자의 옵션이 없습니다. – Whirlwind

    +0

    왜 시뮬레이터에서 테스트 할 수 없습니까? – Devster101

    답변

    2

    이것은 내가 시도한 것이며 예상대로 완벽하게 작동했습니다.

    알림 센터를 어디에 추가했는지 확인할 수 있습니까?

    - 애니메이션 contentInsets

    override func viewWillAppear(_ animated: Bool) { 
        NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillShow(notification:)), name: NSNotification.Name.UIKeyboardWillShow, object: nil) 
    
        NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillHide(notification:)), name: NSNotification.Name.UIKeyboardWillHide, object: nil) 
    } 
    
    func keyboardWillShow(notification: NSNotification) { 
        if let keyboardHeight = (notification.userInfo?[UIKeyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue.height { 
         UIView.animate(withDuration: 0.2, animations: { 
          self.tbl.contentInset = UIEdgeInsetsMake(0, 0, keyboardHeight, 0) 
         }) 
        } 
    } 
    
    func keyboardWillHide(notification: NSNotification) { 
        UIView.animate(withDuration: 0.2, animations: { 
         self.tbl.contentInset = UIEdgeInsetsMake(0, 0, 0, 0) 
        }) 
    } 
    

    - 당신은 스토리 보드에 jQuery과 설정 아래 레이아웃과 높이 제약 조건을 모두이없는 있는지 확인 자동 레이아웃 제약

    애니메이션.

    참고

    그러나 단지 UITableViewController를 사용하여이 작업을 수행 할 수있는 더 쉬운 방법이있다. 이 기능은 기본적으로 처리됩니다. 물론 이것은 사용상 문제가없는 경우입니다.

    편집

    UITextViewUITextField에서 조금 다른 역할을합니다. UITextViewdelegate을 설정하십시오. 그리고 모든 테이블 뷰 정렬을 textViewShouldBeginEditing으로하십시오.https://github.com/hackiftekhar/IQKeyboardManager

    IQKeyboardManager 당신은 어떤 코드와 별도의 설정이 필요하지 않습니다를 입력 할 필요없이 UITextField에/UITextView를 슬라이딩 키보드의 문제를 방지하고 포함 할 수 있습니다 :

    extension ViewController: UITextViewDelegate { 
        func textViewShouldBeginEditing(_ textView: UITextView) -> Bool { 
         let pointInTable:CGPoint = textView.superview!.convert(textView.frame.origin, to: tbl) 
         tbl.contentOffset = CGPoint(x: tbl.contentOffset.x, y: pointInTable.y) 
         return true 
        } 
    } 
    
    +0

    컴퓨터에서 손을 잡자 마자 확인하겠습니다. 그러나 observer를 viewDidLoad에 넣고 deinit에서 제거했다고 말합니다. 아직도, 나는 breakpoint를 넣음으로 점검했기 때문에 그러한 방법이 효과적이라는 것이 긍정적이다. 그리고 슬프게도, 어떤 TableViewController도 여기에 옵션이 없습니다 ... – Whirlwind

    +0

    이상한 점은 이것을 시도한 것입니다 ... 그리고 그것은'UITextField'와 함께 작동합니다. 하지만'UITextView'를 사용하고 있는데 실제로 작동하지 않습니다. 내 말은, 미끄러지는 것이지 올바른 양은 아닙니다. 적어도 그렇게 보입니다. – Whirlwind

    +0

    테이블 바닥 글보기에서 UITextView를 위로 스크롤하고 싶습니까? – Matt

    0

    나는이 문제를 처리 IQKeyboardManager 라이브러리를 사용 . IQKeyboardManager를 사용하려면 프로젝트에 소스 파일을 추가하기 만하면됩니다.

    구현하기가 정말 쉽습니다. 포드 라이브러리를 가져오고 당신의 AppDelegate에에, 추가

    import IQKeyboardManager 
    

    그리고 didFinishLaunchingWithOptions에서 :

    IQKeyboardManager.sharedManager().enable = true 
    
    관련 문제