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