Ios 如何在一起滚动的UITableView顶部添加视图,但在滚动后仍保持在顶部
我有一个高度为100像素的UIView,它位于我的UITableView之上。当我向上滚动时,我希望UIView与我的UITableView一起滚动,就像它是其中的一部分一样。当我的UIView的50个像素被向上滚动隐藏时,我想在继续向上滚动的同时将UIView固定在顶部。如何做到这一点?我尝试使用将UIView的top NSLayoutConstraint常量更改为tableview的内容偏移量,但它们的滚动速度不同 您需要的是为tableView实现Ios 如何在一起滚动的UITableView顶部添加视图,但在滚动后仍保持在顶部,ios,swift,uitableview,uiscrollview,Ios,Swift,Uitableview,Uiscrollview,我有一个高度为100像素的UIView,它位于我的UITableView之上。当我向上滚动时,我希望UIView与我的UITableView一起滚动,就像它是其中的一部分一样。当我的UIView的50个像素被向上滚动隐藏时,我想在继续向上滚动的同时将UIView固定在顶部。如何做到这一点?我尝试使用将UIView的top NSLayoutConstraint常量更改为tableview的内容偏移量,但它们的滚动速度不同 您需要的是为tableView实现viewForHeader设置方法(记住让
viewForHeader设置
方法(记住让您的ViewController实现tableviewDelegate协议),一旦实现了,您应该将tableViewStyle设置为UITableViewStylePlain
如果您对更多帮助感兴趣,请共享您的代码
来源:如果我正确理解您的问题,您可以通过实现如下表视图
scrollViewDidScroll:
方法来实现
- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
static CGFloat previousOffset;
CGRect rect = self.yourUIView.frame;
//NSLog you'r UIView position before putting any condition
// NSLog(@"Origin %f",rect.origin.y);
rect.origin.y += previousOffset - scrollView.contentOffset.y;
previousOffset = scrollView.contentOffset.y;
//assuming you'r UIView y position starts from 0
//Before setting the condition please make sure to run without any
//condition if not working
if(rect.origin.y>=-50 && rect.origin.y<=0){
self.yourUIView.frame = rect;
}
}
-(无效)scrollViewDidScroll:(UIScrollView*)scrollView{
静态偏移量;
CGRect rect=self.yourUIView.frame;
//NSLog在设置任何条件之前查看位置
//NSLog(@“原点%f”,rect.Origin.y);
rect.origin.y+=previousOffset-scrollView.contentOffset.y;
previousOffset=scrollView.contentOffset.y;
//假设您从0开始查看y位置
//在设置条件之前,请确保在没有任何
//不工作时的状况
如果(rect.origin.y>=-50&&rect.origin.y首先确保您的tableView已分组:
self.tableView = UITableView(frame: CGRect(x: 0, y: (self.navigationController?.navigationBar.frame.maxY)!, width: self.view.bounds.size.width, height: (self.view.bounds.size.height - (self.navigationController?.navigationBar.frame.maxY)!)), style: .grouped)
self.tableView.delegate = self
self.tableView.dataSource = self
self.view.addSubview(self.tableView)
然后需要将ui视图
添加到表视图的子视图
:
self.myView = UIView()
self.myView.backgroundColor = UIColor.green
self.myView.frame = CGRect(x: 0, y: 0, width: self.view.bounds.size.width, height: 100)
self.tableView.addSubview(self.myView)
为tableView的第一部分添加高度为100的标题,以便单元格位于正确的位置:
func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
return 100
}
然后在滚动时调整ui视图的框架:
func scrollViewDidScroll(_ scrollView: UIScrollView) {
let offset = scrollView.contentOffset.y
if(offset > 50){
self.myView.frame = CGRect(x: 0, y: offset - 50, width: self.view.bounds.size.width, height: 100)
}else{
self.myView.frame = CGRect(x: 0, y: 0, width: self.view.bounds.size.width, height: 100)
}
}
演示:
我也有同样的问题
navigationItem.largeTitleDisplayMode = .always
navigationBar.prefersLargeTitles = true
及
tableView.contentInset=uiedgeinset(顶部:40,左侧:0,底部:0,右侧:0)
对我来说,上述任何选择都没有帮助,但我意识到你可以打电话给我
tableView.setContentOffset(CGPoint(x: 0, y: -tableView.contentInset.top), animated: false)
在viewDidload()
中,问题消失了!:)
完全忘记了这个方法,花了太多时间来做这种令人毛骨悚然的行为
祝你好运!你应该看看这个答案:你要找的是TableView的风格这是一个很棒的方法,也是我找到的最好的答案。这应该是公认的答案。