我正在使用swift,我想按一下按钮后便会转到表格顶部,就像在Twitter上一样,按下主屏幕按钮会将您带到Feed的顶部,到目前为止,我还无法找到一个可行的解决方案,这就是我所尝试的:
tableView.setContentOffset(.zero, animated: true)
tableView.setContentOffset(CGPoint(x: 0.0, y: -tableView.contentInset.top), animated: true)
func scrollToTop(){
let indexPath = IndexPath(row: 0, section: 0)
tableView.scrollToRow(at: indexPath, at: .top, animated: true)
}
所有解决方案都只会将您带到任意单元格,如果您也知道在单击标签栏按钮时也可以执行此操作的方法,则可以加分
答案 0 :(得分:2)
首先,我喜欢您的用户名。
接下来,您发布的解决方案又有什么问题?他们是正确的,除了UITableView
内置函数外,似乎没有其他更好的方法可以使用UICollectionView
或scrollTo...
来做到这一点。并为offset
设置UIScrollView
。
要处理标签栏上的点击,您可以做的一件事是将UITabBarController
子类化,并遵循其协议,并实现UITabBarControllerDelegate
所需的方法,例如:
func tabBarController(_ tabBarController: UITabBarController, shouldSelect viewController: UIViewController) -> Bool {
。
您可以从那里处理所有内容,并从那里获取viewController
对象并将其投射到您的家庭课程,然后将视图滚动到顶部。
我为此使用什么功能?它与您的相似,但有一点条件:
func hasRowAtIndexPath(indexPath: IndexPath) -> Bool {
return indexPath.section < self.numberOfSections && indexPath.row < self.numberOfRows(inSection: indexPath.section)
}
func scrollToTop(animated: Bool) {
let indexPath = IndexPath(row: 0, section: 0)
if self.hasRowAtIndexPath(indexPath: indexPath) {
self.scrollToRow(at: indexPath, at: .top, animated: animated)
}
}
此外,尝试点击应用程序的状态栏,看看它会带您到哪里。
答案 1 :(得分:0)
我再次编辑了答案,不涉及indexPath:
@IBOutlet weak var myButton: UIButton!
override func viewDidLoad() {
super.viewDidLoad
}
@IBAction func button(_ sender: UIButton) {
myButton.isSelected = !myButton.isSelected
tableView.scrollRectToVisible(CGRect(x: 0, y: 0, width: tableView.frame.width, height: tableView.frame.height), animated: true)
}
override func scrollViewWillBeginDragging(_ scrollView: UIScrollView) {
if myButton.isSelected {
print("SUCCESS 1")
}
}
override func scrollViewWillEndDragging(_ scrollView: UIScrollView, withVelocity velocity: CGPoint, targetContentOffset: UnsafeMutablePointer<CGPoint>) {
if myButton.isSelected {
myButton.isSelected = false
print("SUCCESS 2")
}
}
答案 2 :(得分:0)
我猜这是按钮函数中的其他一些逻辑与scrollToTop()
函数搞混了,此代码有效:
func scrollToTop(){
tableView.setContentOffset(.zero, animated: true)
}
@IBAction func BlogPressed(_ sender: Any) {
if(BlogIndicator.alpha == 1.0){
scrollToTop()
} else {
articleRefresh()
self.articleArray = self.blogArray
BlogIndicator.alpha = 1.0
NewsIndicator.alpha = 0.0
RosterIndicator.alpha = 0.0
DraftIndicator.alpha = 0.0
tableView.reloadData()
}
}
但是我仍在寻找一种解决方案,用于在按下标签栏按钮时转到表格视图的顶部
答案 3 :(得分:-1)
将ScrollViewDelegate添加到您的视图控制器
class ListViewController: UIViewController, UIScrollViewDelegate
使用以下代码添加功能
@IBOutlet weak var bottomToTopButton : UIButton!
在您的ViewDidLoad
bottomToTopButton.addTarget(self, action: #selector(scrollToTop), for: .touchUpInside)
// MARK:- SCROLL TO TOP EVENTS
@objc func scrollToTop(sender:UIButton){
ListTV.setContentOffset(CGPoint.zero, animated: true)
bottomToTopButton.isHidden = true
}
func scrollViewDidEndDragging(_ scrollView: UIScrollView, willDecelerate decelerate: Bool) {
print(hotelListTV.contentOffset.y)
if ListTV.contentOffset.y < 170 {
bottomToTopButton.isHidden = true
}else {
bottomToTopButton.isHidden = false
}
}