Регулировать высоту таблицы и клетки динамически? - PullRequest
0 голосов
/ 21 мая 2018

Я пытаюсь отрегулировать высоту таблицы.Я хочу настроить его всякий раз, когда клавиатура исчезает.Высота стола должна увеличиться.Кроме того, любые ячейки, на которых были данные, также должны двигаться вниз.Они должны двигаться вниз, чтобы отразить новую высоту таблицы.Как я могу это сделать?

Это мой код прямо сейчас:

@IBOutlet weak var tableView: UITableView!

var items = ["Apple", "Orange", "Banana", "Pear"]

override func viewDidLoad() {
    super.viewDidLoad()

    tableView.rowHeight = UITableViewAutomaticDimension
    tableView.estimatedRowHeight = 140
}

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return self.items.count;
}

 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cellIdentifier = "Cell"
    guard let cell = tableView.dequeueReusableCell(withIdentifier: cellIdentifier, for: indexPath) as? UITableViewCell else {
        fatalError("The dequeued cell is not an instance of UITableViewCell.")
    }

    var item = items[indexPath.row]
    cell.Label.text = item

    //Some adjustments
    cell.preservesSuperviewLayoutMargins = false
    cell.separatorInset = UIEdgeInsets.zero
    cell.layoutMargins = UIEdgeInsets.zero

    return cell
}

func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
    return UITableViewAutomaticDimension
}

Ответы [ 2 ]

0 голосов
/ 21 мая 2018
    var isKeyboardOpen:Bool = false
    @IBOutlet weak var tblheight: NSLayoutConstraint!

    override func viewWillLayoutSubviews() {
            super.updateViewConstraints()
            let screenHeight = UIScreen.main.bounds.height
            if self.tableView.contentSize.height  > screenHeight{
                if isKeyboardOpen == true{
                     self.tblheight.constant = screenHeight - 320
                }else{
                     self.tblheight.constant = screenHeight - 100
                }

            }
        }
        func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
            self.viewWillLayoutSubviews()
        }

// textField Delegate Method..
func textFieldDidBeginEditing(_ textField: UITextField) {
        isKeyboardOpen = true
        viewWillLayoutSubviews()
    }

    func textFieldDidEndEditing(_ textField: UITextField) {
        self.view.endEditing(true)
        isKeyboardOpen = false
        textField.resignFirstResponder()
        viewWillLayoutSubviews()
    }
    func textFieldShouldReturn(_ textField: UITextField) -> Bool {
        isKeyboardOpen = false
        self.view.endEditing(true)
        textField.resignFirstResponder()
        return true
    }

попробуй это .. у меня работает.Надеюсь, что это будет полезно ..

0 голосов
/ 21 мая 2018

Соедините нижнее ограничение вашего табличного представления следующим образом, перетащив ограничение из файла xib в ваш файл класса.(Это нижнее ограничение является нижней частью табличного представления, когда клавиатура не видна)

@IBOutlet weak var bottomConstraint: NSLayoutConstraint!

Добавление наблюдателей клавиатуры, как показано ниже

    func setKBObservers() {
        NotificationCenter.default.addObserver(self, selector: #selector(self.keyboardWillShow), name: NSNotification.Name.UIKeyboardWillShow, object: nil)
        NotificationCenter.default.addObserver(self, selector: #selector(self.keyboardWillHide), name: NSNotification.Name.UIKeyboardWillHide, object: nil)
    }

Изменение высоты на основе видимости клавиатуры следующим образом

    func keyboardWillShow(notification: NSNotification) {
        if let keyboardSize = (notification.userInfo?[UIKeyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue {
            bottomConstraint.constant = keyboardSize.height
            view.setNeedsLayout()
            view.layoutIfNeeded()
        }
    }

    func keyboardWillHide(notification: NSNotification) {
        bottomConstraint.constant = 0
        view.setNeedsLayout()
        view.layoutIfNeeded()
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...