2016-12-03 3 views
1

나는 inputAccessoryView 사용자 정의 tableView을 가지고 있으며, tableView.keyboardDismissMode.interactive으로 설정되어 있습니다. UIView 하위 클래스를 만들고이 클래스를 내 사용자 지정 inputAccessoryView으로 만듭니다.신속한 문제 inputAccessoryView

보기에 textView이 있으며 특정 수의 줄에 도달 할 때까지 자동으로 크기를 조정했습니다. 이는 내 코드입니다 :

override var intrinsicContentSize: CGSize { 
    DispatchQueue.main.async { 
     let path = IndexPath(row: self.tableView.numberOfRows(inSection: 0) - 1, section: 0) 
     self.tableView.scrollToRow(at: path, at: .bottom, animated: true) 
    } 
    sendButton.frame.origin.y = self.frame.maxY - 5 - sendButton.frame.height 
    return CGSize(width: self.bounds.width, height: (textView.numberOfLines() < 10 ? textView.text.sizeForWidth(width: textView.frame.width, font: textView.font!).height : 254) + textView.frame.origin.y * 2) 
} 

func textViewDidChange(_ textView: UITextView) { 
    placeholderLabel.isHidden = !textView.text.isEmpty 
    if textView.numberOfLines() < 10 { // I defined numberOfLines() elsewhere 
     textView.isScrollEnabled = false 
    } else { 
     textView.isScrollEnabled = true 
    } 
    invalidateIntrinsicContentSize() 
} 

.async {} 블록은 inputAccessoryView 높이가 증가하면 다시 tableView의 하단으로 스크롤을위한 것입니다.

내 문제는 내가 키보드를 숨기려면 tableView에 아래로 드래그하면, tableView 내가 그것을 아래로 스크롤하지 않을 스크롤 애니메이션합니다 (async 블록의 하나)를 실행한다는 것입니다. 여기 무슨 일이 일어나고 있는지 a video입니다.

나는 이것을 지금 며칠 동안 내가 원하는 방식으로 작동 시키려고 애 쓰고있다. 아무도 그것을 왜 내가 그것을 고칠 수있는 그것을 원하는대로 작동하지 않는 이유를 설명해 주시겠습니까?

미리 감사드립니다.

+0

아무것도를 tableView 현재 스크롤중인 경우 내가 설정 UIScrollView 위임 방법을 사용했다. – matt

답변

2

나는 내 자신의 문제를 해결했습니다! 만세!

이렇게하려면 tableView이 현재 드래그/스크롤되고있는 경우 ViewController에 공개 값을 만들었습니다.

scrollViewWillBeginDragging(_:) 
    and 
scrollViewDidEndDragging(_:) 

내가 다음이에 intrinsicContentSize 변경 : "시각적 제약"함께 할 수있는

override var intrinsicContentSize: CGSize { 
    if viewController.isDragging == false && textView.isFirstResponder { 
     DispatchQueue.main.async { 
      let path = IndexPath(row: self.tableView.numberOfRows(inSection: 0) - 1, section: 0) 
      self.tableView.scrollToRow(at: path, at: .bottom, animated: true) 
     } 
    } 
    sendButton.frame.origin.y = self.frame.maxY - 5 - sendButton.frame.height 
    return CGSize(width: self.bounds.width, height: (textView.numberOfLines() < 10 ? textView.text.sizeForWidth(width: textView.frame.width, font: textView.font!).height : 254) + textView.frame.origin.y * 2) 
} 
+0

안녕하세요, 사용자 정의 inputAccessoryView를 특정 제한으로 확장하는 데 문제가 있습니다. 우리가 원하는 패턴은 iOS 앱의 WhatsApp, iMessage, Skype 등과 비슷합니다. 이 문제를 해결할 수 있도록 도움이나 조언을 제공 할 수 있다면 크게 환영 할 것입니다. 고맙습니다!! –

관련 문제