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

17

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

Сначала у меня есть 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) Я могу прокручивать всю страницу вверх, т. Е. Раздел предварительного просмотра, а tableview будет прокручиваться вместе 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. сделать «Предварительный просмотр» в виде заголовка вашего TableView

  2. создайте «панель поиска» в виде заголовка раздела вашего таблицыView

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

    
ответ дан adali 09.05.2012 в 04:22
источник
3

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

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

    
ответ дан DBD 09.05.2012 в 04:33
источник
2

Или вы можете просто выполнить следующие действия: 1. Отключите прокрутку таблицыView. 2. Задайте ограничение высоты для таблицыView и подключенного к нему IBOutlet. 3. Прежде чем перезагружать данные, вычислите высоту таблицы. % Co_de%     

ответ дан Slavcho 22.09.2014 в 22:28
источник
1

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

    
ответ дан Rasmus H. Hummelmose 09.05.2012 в 03:03
источник
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
источник