Ячейка CollectionView скрыта за элементом - PullRequest
0 голосов
/ 08 мая 2018

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

Изображение:

enter image description here

Редактировать: код для ограничений:

private func setupInputComponents()
{
    let topBorderView = UIView()
    topBorderView.backgroundColor = UIColor(white: 0.5, alpha: 0.5)

    messageInputContainerView.addSubview(inputTextField)
    messageInputContainerView.addSubview(sendButton)
    messageInputContainerView.addSubview(topBorderView)

    messageInputContainerView.addConstraintsWithFormat(format: "H:|-8-[v0][v1(60)]|", views: inputTextField, sendButton)
    messageInputContainerView.addConstraintsWithFormat(format: "V:|[v0]|", views: inputTextField)
    messageInputContainerView.addConstraintsWithFormat(format: "V:|[v0]|", views: sendButton)

    messageInputContainerView.addConstraintsWithFormat(format: "H:|[v0]|", views: topBorderView)
    messageInputContainerView.addConstraintsWithFormat(format: "V:|[v0(0.5)]", views: topBorderView)
}

также, это в viewDidLoad:

    view.addSubview(messageInputContainerView)
    view.addConstraintsWithFormat(format: "H:|[v0]|", views: messageInputContainerView)
    view.addConstraintsWithFormat(format: "V:[v0(48)]", views: messageInputContainerView)

    bottomConstraint = NSLayoutConstraint(item: messageInputContainerView, attribute: .bottom, relatedBy: .equal, toItem: view, attribute: .bottom, multiplier: 1, constant: 0)
    view.addConstraint(bottomConstraint!)

    setupInputComponents()

Ответы [ 2 ]

0 голосов
/ 08 мая 2019

Улучшен код на ios swift 4.2, показывающий текстовые кнопки. Как при вводе кода выше, sendButton автоматически скрывается, поэтому я изменил его, чтобы он оставался неизменным

collectionView.keyboardDismissMode = .interactive
    viewAcc = UIView(frame: CGRect(x: 0, y: 0, width: UIScreen.main.bounds.width, height: 44))
    viewAcc?.backgroundColor = UIColor.white
    inputTextField = UITextField (frame: CGRect(x:8, y:0, width:400, height: 44 ))
    inputTextField.inputAccessoryView = nil
    inputTextField.delegate = self as? UITextFieldDelegate
    inputTextField.placeholder = "Enter message..."
    viewAcc?.backgroundColor = .white
    viewAcc?.addSubview(inputTextField);

    let topBorderView = UIView()
    topBorderView.backgroundColor = UIColor(white: 0.5, alpha: 0.5)
    viewAcc?.addSubview(topBorderView)
    viewAcc?.addConstraintsInViews(format: "H:|[v0]|", views: topBorderView)
    viewAcc?.addConstraintsInViews(format: "V:|[v0(0.5)]", views: topBorderView)

    sendButton = UIButton(type: .system)
    sendButton.isEnabled = true
    sendButton.titleLabel?.font = UIFont.systemFont(ofSize: 16)
    sendButton.setTitle("Send", for: .normal)
    sendButton.contentEdgeInsets = UIEdgeInsets(top: 8, left: 8, bottom: 8, right: 8)
    sendButton.addTarget(self, action: #selector(addmessage), for: .touchUpInside)
    viewAcc?.addSubview(sendButton)

    inputTextField.translatesAutoresizingMaskIntoConstraints = false
    sendButton.translatesAutoresizingMaskIntoConstraints = false
    viewAcc?.addConstraintsInViews(format: "H:|-4-[v0][v1(60)]|", views: inputTextField,sendButton)
    viewAcc?.addConstraintsInViews(format: "V:|-4-[v0]-4-|", views: inputTextField)
    viewAcc?.addConstraintsInViews(format: "V:|-4-[v0]-4-|", views: sendButton)
0 голосов
/ 08 мая 2018

Вот лучшее решение, чтобы добавить текстовое представление и кнопку как представление аксессуара viewcontroller

Если вы видели приложение для обмена сообщениями ios, вы отклоняете клавиатуру в интерактивном режиме. с этим ваша проблема также будет решена, так как мы не добавляем текстовое представление и кнопку к пользовательскому интерфейсу как подпредставление, оно будет работать как вспомогательное представление контроллера представления

Шаг 1: (необязательно)

Перейти к Storybaord выбрать представление коллекции и в списке свойств изменить режим отклонения клавиатуры на Увольнение в интерактивном режиме

enter image description here

, а также создайте представление коллекции, чтобы заполнить весь экран (не добавляйте места для вашего textField и кнопки отправки)

Шаг 2:

В вашем контроллере представления добавьте следующие свойства вверху

var viewAcc: UIView?
var sendButton: UIButton!
var inputTextField: UITextField!

override var inputAccessoryView: UIView? {
    return viewAcc
}

override var canBecomeFirstResponder: Bool {
    return true
}

В методе ViewDidLoad добавьте следующий код для представления инициализации, добавьте textField и кнопку отправки

    viewAcc = UIView(frame: CGRect(x: 0, y: 0, width: UIScreen.main.bounds.width, height: 44))
    viewAcc?.backgroundColor = UIColor.white
    inputTextField = UITextField (frame: CGRect(x:8, y:0, width:UIScreen.main.bounds.width, height: 44 ))
    inputTextField.inputAccessoryView = nil
    inputTextField.delegate = self as? UITextFieldDelegate
    inputTextField.placeholder = "Enter message..."
    viewAcc?.backgroundColor = .white
    viewAcc?.addSubview(inputTextField);

    let topBorderView = UIView()
    topBorderView.backgroundColor = UIColor(white: 0.5, alpha: 0.5)
    viewAcc?.addSubview(topBorderView)
    viewAcc?.addConstraintsWithFormat(format: "H:|[v0]|", views: topBorderView)
    viewAcc?.addConstraintsWithFormat(format: "V:|[v0(0.5)]", views: topBorderView)

    sendButton = UIButton(type: .system)
    sendButton.isEnabled = true
    sendButton.titleLabel?.font = UIFont.systemFont(ofSize: 16)
    sendButton.setTitle("Send", for: .normal)
    sendButton.contentEdgeInsets = UIEdgeInsets(top: 8, left: 8, bottom: 8, right: 8)
    sendButton.addTarget(self, action: #selector(handleSend), for: .touchUpInside)
    viewAcc?.addSubview(sendButton)

    inputTextField.translatesAutoresizingMaskIntoConstraints = false
    sendButton.translatesAutoresizingMaskIntoConstraints = false
    viewAcc?.addConstraint(NSLayoutConstraint(item: inputTextField, attribute: .left, relatedBy: .equal, toItem: viewAcc, attribute: .left, multiplier: 1, constant: 8))
    viewAcc?.addConstraint(NSLayoutConstraint(item: inputTextField, attribute: .top, relatedBy: .equal, toItem: viewAcc, attribute: .top, multiplier: 1, constant: 7.5))
    viewAcc?.addConstraint(NSLayoutConstraint(item: inputTextField, attribute: .right, relatedBy: .equal, toItem: sendButton, attribute: .left, multiplier: 1, constant: -2))
    viewAcc?.addConstraint(NSLayoutConstraint(item: inputTextField, attribute: .bottom, relatedBy: .equal, toItem: viewAcc, attribute: .bottom, multiplier: 1, constant: -8))
    viewAcc?.addConstraint(NSLayoutConstraint(item: sendButton, attribute: .right, relatedBy: .equal, toItem: viewAcc, attribute: .right, multiplier: 1, constant: 0))
    viewAcc?.addConstraint(NSLayoutConstraint(item: sendButton, attribute: .bottom, relatedBy: .equal, toItem: viewAcc, attribute: .bottom, multiplier: 1, constant: -4.5))

Теперь запустите приложение, в нижней части которого вы увидите текстовое поле и кнопку, а также полный просмотр коллекции. и вы можете отклонить клавиатуру, просто удерживая ее и проведя вниз

Надеюсь, это полезно

...