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

17

Как я могу сделать следующее в 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];

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

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

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];
    
задан Zhen 09.05.2012 в 02:56
источник

6 ответов

33

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

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

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

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

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

    
ответ дан adali 09.05.2012 в 04:22
  • Это работает только для tableView с одним разделом. –  SAHM 19.09.2014 в 23:52
  • Может ли какой-нибудь орган объяснить мне больше? пожалуйста –  Ravi Ojha 25.09.2015 в 09:01
3

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

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

    
ответ дан DBD 09.05.2012 в 04:33
2

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

    
ответ дан Slavcho 22.09.2014 в 22:28
1

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

    
ответ дан Rasmus H. Hummelmose 09.05.2012 в 03:03
  • Привет, спасибо за ваш ответ. Я добавил код для просмотра UIScroll, но это не сработало для меня, то есть ничего не изменилось с моей первоначальной реализации. Можете ли вы помочь мне взглянуть на мой отредактированный вопрос? Я добавил код uiscrollview. заранее спасибо –  Zhen 09.05.2012 в 03:34
  • На самом деле вы должны пойти с решением DBD / adali, это лучше, чем у меня :) –  Rasmus H. Hummelmose 09.05.2012 в 09:29
0

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

    
ответ дан zucknet 12.09.2013 в 11:40
0
scroll.contentSize = CGSizeMake(self.view.frame.size.width, self.view.frame.size.height);

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

ответ дан Ohmy 11.02.2015 в 00:40