2016-12-03 3 views
1

У меня есть tableView, у которого есть обычай inputAccessoryView, и у меня есть 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 {} блок для прокрутки в нижней части tableView снова когда-то inputAccessoryView высота увеличивается.

Моя проблема заключается в том, что, когда я тащу вниз на tableView, чтобы скрыть клавиатуру, то tableView запускает анимацию прокрутки (тот, в async блоке), когда я не хочу, чтобы это прокрутите до конца. Вот a video того, что происходит.

Я боролся с тем, чтобы это работало, как я хочу на пару дней. Может ли кто-нибудь объяснить мне, почему он не работает, как я хочу, и как я могу это исправить?

Большое спасибо!

+0

ничего общего с «визуальными ограничениями». – matt

ответ

2

Я решил свою проблему! Ура!

Для этого я создал общедоступное значение в ViewController, если tableView в настоящее время перетаскивается/прокручивается. Я использовал UIScrollView метод делегата, чтобы установить, если tableView не в настоящее время прокручивается:

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

Привет, У меня возникли проблемы с расширением моего customAccessoryView до определенного предела. Шаблон, который мы хотим достичь, похож на WhatsApp, iMessage, Skype и т. Д. В их приложениях iOS. Если бы вы могли предоставить какую-либо помощь или руководство, чтобы помочь мне достичь этого, это было бы весьма признательно. Спасибо!! –

Смежные вопросы