iOS-滚动前移动TableView

iOS-滚动前移动TableView,ios,swift,uitableview,cocoa-touch,tableview,Ios,Swift,Uitableview,Cocoa Touch,Tableview,我有一个带有图像和表视图的视图。图像位于屏幕的上半部分(纵向),而tableview位于下半部分。现在,我想将tableview移动到图像上方,直到它到达顶部并覆盖图像。然后它应该开始“真正的滚动” 但是最好的方法是什么呢?我可以替换变量tableView的touchsmove吗?我可以创建UITableView的扩展并重写该函数,但是我无法访问控制器的视图来移动tableView 有答案吗?谢谢 imageView应位于tableView的后面,约束条件为top、leading、Trainin

我有一个带有图像和表视图的视图。图像位于屏幕的上半部分(纵向),而tableview位于下半部分。现在,我想将tableview移动到图像上方,直到它到达顶部并覆盖图像。然后它应该开始“真正的滚动”

但是最好的方法是什么呢?我可以替换变量tableView的touchsmove吗?我可以创建UITableView的扩展并重写该函数,但是我无法访问控制器的视图来移动tableView


有答案吗?谢谢

imageView应位于tableView的后面,约束条件为top、leading、Training到superview和height到superview,乘数为0.5。tableView应填充其superview


诀窍是添加一个不可见且等于屏幕高度一半的tableViewHeader。这会将tableView的初始内容推离屏幕。在interface builder中,将UIView作为标题添加到tableView中,并使其透明。还要使tableView的背景透明。从一个出口进入headerView和tableView。在viewDidLayoutSubviews中设置标题View.frame.size.height=tableView.frame.size.height/2。

除了Josh回答的问题外,您还可以尝试:

您可以做的是使
UIImageView
的高度根据滚动量减小,直到
UIImageView
的高度为0,然后开始滚动,否则将强制
UITableView
contentOffSet
始终保持为0。尽管如此,以下是如何做到这一点:

创建枚举以跟踪
UIImageView
的各种状态,如:

enum Layout {

     case ImageExpanding,
     case ImageDefaultHeight,
     case ImageDiminishing,
     case ImageNotVisible
}
在故事板中,为
UIImageView
的superview添加一个顶部、前导和尾随约束,并将固定高度约束设为200(不要担心,稍后您会更改此约束)。在
UITableView
中,向superview添加前导、尾随和底部约束,并在
UIImageView
中添加顶部约束。现在将
UIImageView
高度的约束出口拖放到
UIViewController

viewdiload
中,将
heightConstraint
设置为总屏幕高度的1/2,并将枚举状态最初设置为
ImageDefaultHeight

现在,在您的
scrollViewDidScroll
中,您必须检查滚动方向,并在此基础上检查图像的当前状态,根据用户滚动的数量增加或减少高度限制,并始终检查:

func scrollViewDidScroll(_ scrollView: UIScrollView) {

     if(/*up*/){
          //just telling you about this if condition as this will ensure that 
          //if your table view is large and if tableview isn't at the top, 
          //the image shouldn't expand

           if layout == .ImageNotVisible{

               if scrollView.contentOffset.y <= 0 {

                    //start expanding once you reach top of tableview
                    layout = .ImageExpanding;
               }
           }

          //keep track of other enum states and update your uiimageview 
          //appropriately after calculating the user scroll amount         
          //until the height reaches your initialDefaultHeight and 
          //then do nothing. You will have to figure out the code 
          //for this on your own


     }else if(/*down*/){

          //make image smaller
     }

     //dont let table view scroll until image height is 0 when use is scrolling down
     if layout != ImageNotVisible{

         scrollView.contentOffset = CGPoint(x: 0, y: 0)
     }
}
func scrollViewDidScroll(scrollView:UIScrollView){
如果(/*up*/){
//只要告诉你这个条件,因为这将确保
//如果您的表视图很大,而tableview不在顶部,
//图像不应该扩展
如果布局==.ImageNotVisible{

如果scrollView.contentOffset.y谢谢!但我如何才能使标题透明?我已经创建了一个新视图,将alpha设置为0.0,将背景设置为UIColor.clear。边界是x:0,y:0,宽度:屏幕宽度,高度:屏幕高度/2。然后我用tableView.tableHeaderView=headerView设置它。我说得对吗?