Как это работает scrollToRow (at: at: animated :) в swift? - PullRequest
0 голосов
/ 27 апреля 2018

Я создаю интерфейс чата.

Сообщение пользователя помещается в новую ячейку представления UITable.

А при обновлении табличного представления я использую следующий код.

extension UITableView {

    func scrollToBottom() {
        let rows = self.numberOfRows(inSection: 0)

        if rows > 0 {
            let indexPath = IndexPath(row: rows - 1, section: 0)
            self.scrollToRow(at: indexPath, at: .bottom, animated: true)
        }
    }
}

На самом деле это работает немного лучше, но есть что-то странное.

Когда я выключаю приложение и снова включаю его, или после выхода из экрана и повторного входа возникают следующие проблемы.

Проблема заключается в том, что когда я добавляю новую ячейку, она поднимается до первой ячейки в табличном представлении и обратно до последней ячейки.

По мере увеличения числа ячеек прокрутка становится слишком быстрой и слишком грязной.

Я просто хочу обновить последнюю зарегистрированную ячейку.

Что мне делать?

Ответы [ 2 ]

0 голосов
/ 27 апреля 2018

Попробуйте вызвать функцию scrollToBottom в методе viewWillAppear. Возможно, ему просто нужно обновить количество строк, когда вы вернетесь к своему TableViewController.

0 голосов
/ 27 апреля 2018
 func textView(textView: UITextView, shouldChangeTextInRange range: NSRange, replacementText text: String) -> Bool {

        let newText = (textView.text as NSString).stringByReplacingCharactersInRange(range, withString: text)
        let numberOfChars = newText.characters.count // for Swift use count(newText)
        let typedStr : String = textView.text
        var compArr = typedStr.componentsSeparatedByString("\n")
        _ = newText.componentsSeparatedByString("\n")
        self.sendBtn.setTitle("Send", forState: .Normal)

        if numberOfChars > 0 {

            self.sendBtn.enabled = true
        }
        else {

            self.TextViewHeight.constant = TEXTVIEW_OFFSET
            self.sendBtn.enabled = false
        }
        let  char = text.cStringUsingEncoding(NSUTF8StringEncoding)!
        let isBackSpace = strcmp(char, "\\b")

        if text == "\n"
        {
            print("Return_Pressed")
            if  compArr.count == 1 || compArr.count == 2 || compArr.count == 3
            {
                self.TextViewHeight.constant =  self.TextViewHeight.constant + 25
                self.tableViewScrollToBottom(false)
            }
            else
            {

            }
        }
    }



func tableViewScrollToBottom(animated: Bool) {

      dispatch_async(dispatch_get_main_queue()) {

                let numberOfSections = self.ChatTableView.numberOfSections
                let numberOfRows = self.ChatTableView.numberOfRowsInSection(numberOfSections-1)

                if numberOfRows > 0 {

                    let indexPath = NSIndexPath(forRow: numberOfRows-1, inSection: (numberOfSections-1))
                    self.ChatTableView.scrollToRowAtIndexPath(indexPath, atScrollPosition: UITableViewScrollPosition.Bottom, animated: animated)
                }

            }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...