вы не должны реализовывать это в вашем tableView, вы должны добавить его в свои homeTabs, где вы реализовали свои вкладки, вы не можете ни добавить его, добавив в качестве IBOutlet, либо просто объявить его как кнопку, вот мой код (у меня естьплавающая кнопка на моей вкладке "Конкурсы")
@IBOutlet weak var leaderBoardBtn: UIButton!
// добавляем ограничения верхний верхний ведущий-трейлинг для кнопки ur *
@IBOutlet weak var leadBottom: NSLayoutConstraint!
/// это заставляет мою кнопку плавать // это ограничение нижней части моей кнопки к superView.bottom
, а затем в viewDidLoad:
NotificationCenter.default.addObserver(self, selector: #selector(leadAnime(_:)),name:NSNotification.Name(rawValue: "animate"), object: nil)
, а затем в некоторых местах из viewDidLoad добавьте:
@objc func leadAnime(_ notification: NSNotification) {
if let count = notification.userInfo?["top"] as? Bool{
if count{
leadBottom.constant = 20
UIView.animate(withDuration: 0.3, animations: {
self.view.layoutIfNeeded()
})
}else{
leadBottom.constant = -100
UIView.animate(withDuration: 0.3, animations: {
self.view.layoutIfNeeded()
})
}
}
}
Теперь в вашем контроллере табличного представления:
var scrollS :CGFloat = 0
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
NotificationCenter.default.post(name: NSNotification.Name(rawValue: "animate"), object: nil, userInfo: ["top":false])
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
NotificationCenter.default.post(name: NSNotification.Name(rawValue: "animate"), object: nil, userInfo: ["top":true]) }
override func scrollViewDidScroll(_ scrollView: UIScrollView) {
if scrollS - scrollView.contentOffset.y < 0{
NotificationCenter.default.post(name: NSNotification.Name(rawValue: "animate"), object: nil, userInfo: ["top":true])
}else{
if scrollS - scrollView.contentOffset.y > 0{
NotificationCenter.default.post(name: NSNotification.Name(rawValue: "animate"), object: nil, userInfo: ["top":false])
}
}
scrollS = scrollView.contentOffset.y
}
override func scrollViewWillBeginDragging(_ scrollView: UIScrollView) {
if scrollS - scrollView.contentOffset.y < 0{
NotificationCenter.default.post(name: NSNotification.Name(rawValue: "animate"), object: nil, userInfo: ["top":true])
}else{
if scrollS - scrollView.contentOffset.y > 0{
NotificationCenter.default.post(name: NSNotification.Name(rawValue: "animate"), object: nil, userInfo: ["top":false])
}
}
scrollS = scrollView.contentOffset.y
}