2012-05-09 2 views
17

Как я могу сделать следующее в UIViewController (содержащий TableView как подвид)Как встроить UITableView в UIScrollView

я изначально имеют 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 (и) SearchBar ниже

//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]; 

enter image description here

С помощью этой установки, моя скроллинг области компактна (статическая область ниже предварительного раздела)

Как я могу изменить мой код таким образом, что 1) Я могу прокрутить всю страницу вверх т.е. раздел предварительного просмотра и TableView будут перемещаться вместе 2) скроллинг в целом остановится, когда панель поиска достигает вершины (ниже навигационной панели) (см скриншот), но содержание в UITableView все еще прокручивать

enter image description here

EDIT:

Добавлен код для просмотра 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]; 

ответ

33

У меня есть для вас решение,

использование только Tableview достаточно

  1. сделать "Preview View", как HeaderView вашего Tableview

  2. сделать "Search Bar" в качестве заголовка раздела Вид вашего столаView

вы можете сделать это прекрасно :)

+3

Это работает только для tableView с одним разделом. – SAHM

+1

Может ли какое-нибудь тело объяснить мне это больше? пожалуйста – RaviJSS

1

Вам придется вставлять UITableView внутри UIScrollView, который имеет размер экрана минус панели навигации. Установите фон UIScrollViews на clearColor, чтобы ваш контент над UITableView оставался видимым.

+0

Привет, спасибо за ваш ответ. Я добавил код для просмотра UIScroll, но это не сработало для меня, то есть ничего не изменилось с моей первоначальной реализации. Можете ли вы помочь мне взглянуть на мой отредактированный вопрос? Я добавил код uiscrollview. Заранее спасибо – Zhen

+0

Вы действительно должны пойти с решением DBD/adali, это лучше, чем у меня :) –

3

Нет необходимости что-либо фантазии или обычая, используйте UITableView и установите панель предварительного просмотра, чтобы быть tableHeaderView и ваше поле поиска будет раздел заголовка с использованием tableView:viewForHeaderInSection: в вашем UITableViewDelegate.

Заголовок таблицы будет прокручиваться сверху во время события прокрутки. Заголовки разделов плавают и остаются видимыми все время этой секции, если они видны. Если у вас только 1 раздел, тогда заголовок раздела будет там все время.

0

Да, вы можете использовать «tableView: viewForHeaderInSection».

2

Или вы можете выполнить следующие действия: 1. Отключить прокрутку таблицыView. 2. Установите ограничение высоты для таблицыView и подключенного к нему IBOutlet. 3. Перед перезагрузкой данных вычислите высоту стола.heightConstraint.constant = (heightOfTheSingleTableViewCell) * numOfRows

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

Это не может прокручивать, потому что contentSize не является достаточно большим. Вам нужно увеличить длину до общей длины вашего контента, находящегося поверх scrollView.

Смежные вопросы