Мне нужно использовать UIView по многим причинам.Главной причиной является странный и раздражающий сбой, который на самом деле имел смысл.См. Мой пост: Проблемы с интерактивной клавиатурой, всегда подпрыгивающей - она также отражает фон коллекции.
Вот видео моей проблемы: https://www.youtube.com/watch?v=VcxEJGqf7BE&feature=youtu.be
Итак, то, что у меня сейчас есть, в моем viewDidLoad ():
let layout: UICollectionViewFlowLayout = UICollectionViewFlowLayout()
layout.sectionInset = UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 0)
layout.itemSize = CGSize(width: view.frame.width, height: 700)
collectionview = UICollectionView(frame: self.view.frame, collectionViewLayout: layout)
collectionview.dataSource = self
collectionview.delegate = self
collectionview.backgroundColor = .clear
collectionview.register(ChatroomMessageCell.self, forCellWithReuseIdentifier: cellId)
collectionview.register(UICollectionViewCell.self, forSupplementaryViewOfKind: UICollectionView.elementKindSectionHeader, withReuseIdentifier: headerId)
collectionview.bounces = true
collectionview.alwaysBounceVertical = true //Scrolling
collectionview.keyboardDismissMode = UIScrollView.KeyboardDismissMode.interactive //Keyboard drop when scroll
collectionview.contentInset = UIEdgeInsets(top:0, left: 0, bottom: 8, right: 0)
}
И это для того, что у меня есть в UIView, который следует за клавиатурой.
lazy var inputContainerView: UIView = {
let containerView = UIView()
containerView.frame = CGRect(x: 0, y: 0, width: view.frame.width, height: 700)
containerView.backgroundColor = .white
let sendButton = UIButton(type: .system)
sendButton.backgroundColor = UIColor.white
sendButton.tintColor = .blue
sendButton.setTitle("Send", for: .normal)
sendButton.translatesAutoresizingMaskIntoConstraints = false
sendButton.addTarget(self, action: #selector(handleSend), for: .touchUpInside)
containerView.addSubview(sendButton)
//Add constraints x,y,w,h
sendButton.rightAnchor.constraint(equalTo: containerView.rightAnchor).isActive = true
sendButton.bottomAnchor.constraint(equalTo: containerView.bottomAnchor).isActive = true
sendButton.widthAnchor.constraint(equalToConstant: 80).isActive = true
sendButton.heightAnchor.constraint(equalToConstant: 50).isActive = true
containerView.addSubview(self.inputTextField)
//Add constraints x,y,w,h
inputTextField.leftAnchor.constraint(equalTo: containerView.leftAnchor, constant: 8).isActive = true
inputTextField.bottomAnchor.constraint(equalTo: containerView.bottomAnchor).isActive = true
inputTextField.rightAnchor.constraint(equalTo: sendButton.leftAnchor).isActive = true
inputTextField.heightAnchor.constraint(equalTo: sendButton.heightAnchor).isActive = true
containerView.addSubview(collectionview)
collectionview.translatesAutoresizingMaskIntoConstraints = false
collectionview.leftAnchor.constraint(equalTo: containerView.leftAnchor).isActive = true
collectionview.topAnchor.constraint(equalTo: containerView.topAnchor, constant: 20).isActive = true
collectionview.widthAnchor.constraint(equalTo: containerView.widthAnchor).isActive = true
collectionview.bottomAnchor.constraint(equalTo: inputTextField.topAnchor).isActive = true
return containerView
}()
override var inputAccessoryView: UIView? {
get{
return inputContainerView
}
}
override var canBecomeFirstResponder: Bool {
return true
}
Хотя это очень глючно.Поля collectionview и inputtext действительно легко следуют за клавиатурой, когда нажимаете на клавиатуре вверх, но в ALL нет интерактивности :( Когда я пытаюсь прокрутить вниз и получить интерактивную клавиатуру, она просто идет вниз и даже не анимируется вообщеКто-нибудь может помочь, пожалуйста? Мне нужно, чтобы это тоже было в UIViewController. Если вы не сможете помочь мне с моим первым постом, тогда я буду обходить это таким образом. Я застрял на этом уже несколько дней.
Честно говоря, я даже не знаю, что я делаю или является ли это жизнеспособным, но мне просто нужно иметь UIView с полем ввода текста после клавиатуры, а также UICollectionView после этого поля ввода текста. Мне также нужна интерактивность клавиатурыЭто то, что я имею до сих пор.