Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何在一起滚动的UITableView顶部添加视图,但在滚动后仍保持在顶部_Ios_Swift_Uitableview_Uiscrollview - Fatal编程技术网

Ios 如何在一起滚动的UITableView顶部添加视图,但在滚动后仍保持在顶部

Ios 如何在一起滚动的UITableView顶部添加视图,但在滚动后仍保持在顶部,ios,swift,uitableview,uiscrollview,Ios,Swift,Uitableview,Uiscrollview,我有一个高度为100像素的UIView,它位于我的UITableView之上。当我向上滚动时,我希望UIView与我的UITableView一起滚动,就像它是其中的一部分一样。当我的UIView的50个像素被向上滚动隐藏时,我想在继续向上滚动的同时将UIView固定在顶部。如何做到这一点?我尝试使用将UIView的top NSLayoutConstraint常量更改为tableview的内容偏移量,但它们的滚动速度不同 您需要的是为tableView实现viewForHeader设置方法(记住让

我有一个高度为100像素的UIView,它位于我的UITableView之上。当我向上滚动时,我希望UIView与我的UITableView一起滚动,就像它是其中的一部分一样。当我的UIView的50个像素被向上滚动隐藏时,我想在继续向上滚动的同时将UIView固定在顶部。如何做到这一点?我尝试使用将UIView的top NSLayoutConstraint常量更改为tableview的内容偏移量,但它们的滚动速度不同

您需要的是为tableView实现
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的风格这是一个很棒的方法,也是我找到的最好的答案。这应该是公认的答案。