我正在尝试复制App Store搜索功能,再次点击搜索标签栏 ,将搜索结果滚动回第一个。
我的情况更简单,因为它是一个传统的表视图,所以它需要滚动到顶部。我设置了UITabBarControllerDelegate,可以检测标签栏的选择。
在didSelectViewController中,我尝试过:
- (void) tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController {
if(viewController == tabBarController.selectedViewController) {
[searchResultsTable setContentOffset:CGPointZero animated:YES];
}
}
和
[searchResultsTable scrollRectToVisible:tableOrigin animated:YES];
其中tableOrigin是我在viewDidLoad中设置的表视图框架矩形。
第一个实现(setContentOffset)向上滚动但停在搜索栏之外并部分切断第一行。我假设这与导航栏的工作原理有关吗?
第二个实现(scrollRectToVisible)第一次工作但是如果我稍后回到搜索选项卡则会变得很糟糕。
是否有一个可靠的,可重复的视图来模仿“滚动到顶部”功能,就像它以编程方式点击状态栏并且不会切断iOS 7中的任何行或搜索栏一样?
更新:SearchBar是UITableView的一部分。
答案 0 :(得分:3)
您可以尝试:
[searchResultsTable scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:0
inSection:0]
atScrollPosition:UITableViewScrollPositionTop
animated:YES];
答案 1 :(得分:0)
你没有做错任何事。尝试在视图上运行[self.view updateConstraints]
。如果没有解决问题,请尝试Timestamp
。
答案 2 :(得分:0)
SWIFT 3
只需将collectionView更改为tableView
即可首先在类中实现UITabBarControllerDelegate
并确保在viewDidLoad中设置委托
class DesignStoryStreamVC: UIViewController, UICollectionViewDelegate, UICollectionViewDataSource, UITabBarControllerDelegate {
@IBOutlet weak var collectionView: UICollectionView!
override func viewDidLoad() {
super.viewDidLoad()
self.tabBarController?.delegate = self
collectionView.delegate = self
collectionView.dataSource = self
}
}
接下来,将此委托函数放在您的类中的某个位置。
func tabBarController(_ tabBarController: UITabBarController, didSelect viewController: UIViewController) {
let tabBarIndex = tabBarController.selectedIndex
print(tabBarIndex)
if tabBarIndex == 0 {
self.collectionView.setContentOffset(CGPoint.zero, animated: true)
}
}
确保在“if”语句中选择正确的索引。我包含了打印功能,因此您可以仔细检查。