如何在UIScrollview中embedded一个UITableView

我怎样才能在UIViewController(包含一个tableview作为子视图)

我最初有一个UIViewController显示预览部分(UIView)

//Setup container for preview section UIView *tempContainer = [[UIView alloc]initWithFrame:CGRectMake(0, 20, 320, 100)]; self.preview_answer_container = tempContainer; self.preview_answer_container.backgroundColor = [UIColor clearColor]; [tempContainer release]; [self.view addSubview:self.preview_answer_container]; 

我还在下面添加了一个UITableView(和一个search栏)

 //setup tableview UITableView *tempTable = [[UITableView alloc]initWithFrame:CGRectMake(0,44 ,320,self.view.frame.size.height - 44)]; self.tagFriendsTableView = tempTable; self.tagFriendsTableView.delegate = self; self.tagFriendsTableView.dataSource = self; [tempTable release]; [self.view addSubview:self.tagFriendsTableView]; 

在这里输入图像说明

有了这个设置,我的滚动区域很小(只有预览部分下面的静态区域)

我怎样才能修改我的代码,使1)我可以向上滚动整个页面,即预览部分和tableview将一起向上滚动2)滚动作为一个整体将停止当search栏到达顶部(下方导航栏)(见截图),但UITableView中的内容仍然是可滚动的

在这里输入图像说明

编辑:

添加了UIScroll视图的代码。 然而,我没有任何改变。 我的代码有什么问题?

 //setup scroll view UIScrollView *scroll = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)]; //Search UISearchBar *tempBar = [[UISearchBar alloc]initWithFrame:CGRectMake(0, 120 + 20, 320, 44)]; self.sBar = tempBar; [tempBar release]; self.sBar.delegate = self; self.sBar.tintColor = [UIColor colorWithHexString:@"#b6c0c7"]; self.sBar.placeholder = @"Search for FB and DM friends"; [scroll addSubview:sBar]; //setup tableview UITableView *tempTable = [[UITableView alloc]initWithFrame:CGRectMake(0,144 + 20 + 20 ,320,self.view.frame.size.height - 144 - 20 - 20 - 44)]; self.tagFriendsTableView = tempTable; self.tagFriendsTableView.delegate = self; self.tagFriendsTableView.dataSource = self; [tempTable release]; //Add the scroll view to the parent view [scroll addSubview:self.tagFriendsTableView]; scroll.contentSize = CGSizeMake(self.view.frame.size.width, self.view.frame.size.height); [self.view addSubview:scroll]; [scroll release]; 

我有你的解决scheme,

只用tableView就足够了

  1. 使“预览视图”作为您的tableView的HeaderView

  2. 使“search栏”作为您的tableView的部分标题视图

你可以做到完美:)

不需要任何花哨或自定义,使用UITableView并设置您的预览窗格是tableHeaderView和您的search字段是使用tableView:viewForHeaderInSection:在您的UITableViewDelegate的部分标题。

滚动事件期间,表格标题将从顶部滚动。 节标题浮动并保持可见整个时间该部分,如果可见。 如果你只有一个部分,那么部分标题就会一直在那里。

或者你可以做这些步骤:1.禁用滚动的tableView。 2.设置高度约束到tableView和一个IBOutlet连接到它。 3.重新载入数据之前,计算表格高度。 heightConstraint.constant = (heightOfTheSingleTableViewCell) * numOfRows

你将不得不将UITableViewembedded到屏幕大小减去导航栏的UIScrollView中。 将UIScrollViews背景设置为clearColor以允许您的内容在UITableView上方保持可见状态。

是的,你可以使用“tableView:viewForHeaderInSection”。

 scroll.contentSize = CGSizeMake(self.view.frame.size.width, self.view.frame.size.height); 

它不能滚动,因为contentSize不够大。 您需要增加scrollView顶部的内容的总长度。