Подтвердить что ты не робот

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

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

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];
4b9b3361

Ответ 1

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

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

  • сделать "Предварительный просмотр" в виде заголовка вашего TableView

  • создайте "панель поиска" в виде заголовка раздела вашего таблицыView

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

Ответ 2

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

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

Ответ 3

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

Ответ 4

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

Ответ 5

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

Ответ 6

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

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