it-swarm.com.ru

Как встроить UITableView в UIScrollview

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

У меня изначально есть 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 (и панель поиска) ниже

//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) Я мог прокрутить всю страницу вверх, т.е. раздел предварительного просмотра и просмотр таблицы будут прокручиваться вместе 2) Прокрутка в целом остановится, когда панель поиска достигнет вершины (ниже панели навигации). ) (см. скриншот), но содержимое в UITableView все еще можно прокручивать

enter image description here

Правка:

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

у меня есть решение для тебя,

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

  1. сделать «Предварительный просмотр» как HeaderView вашего tableView

  2. сделать "Панель поиска" в качестве представления заголовка раздела вашего tableView 

вы можете сделать это отлично :)

33
adali

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

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

3
DBD

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

2
Slavcho

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

1
Rasmus H. Hummelmose
scroll.contentSize = CGSizeMake(self.view.frame.size.width, self.view.frame.size.height);

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

0
Ohmy

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

0
zucknet