web-dev-qa-db-fra.com

Comment incorporer un UITableView dans une UIScrollview

Comment puis-je effectuer les opérations suivantes dans un UIViewController (contenant une vue de table en tant que sous-vue)

J'ai initialement un UIViewController montrant une section d'aperçu (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];

J'ai également ajouté un UITableView (et une barre de recherche) ci-dessous

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

Avec cette configuration, ma zone de défilement est petite (zone statique uniquement sous la section de prévisualisation)

Comment modifier mon code de manière à ce que 1) Je puisse faire défiler la page entière vers le haut, c.-à-d. top (sous la barre de navigation) (voir capture d'écran), mais le contenu de UITableView est toujours défilable

enter image description here

MODIFIER:

Ajout du code pour la vue UIScroll. Cependant, rien n'a changé pour moi. Quel est le problème avec mon code?

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

j'ai une solution pour toi,

utiliser seulement tableView est suffisant 

  1. faire de la "Vue d'aperçu" comme HeaderView de votre tableView

  2. faites la "barre de recherche" comme en-tête de section Voir votre tableView 

vous pouvez le faire parfaitement :)

33
adali

Nul besoin de quelque chose d'extraordinaire ou personnalisé, utilisez une UITableView et définissez votre volet d'aperçu sur tableHeaderView et votre champ de recherche sur l'en-tête de section utilisant tableView:viewForHeaderInSection: dans votre UITableViewDelegate.

L'en-tête de la table défilera en haut pendant l'événement de défilement. Les en-têtes de section flottent et restent visibles pendant toute la durée de cette section, le cas échéant. Si vous n'avez qu'une seule section, l'en-tête de la section sera là tout le temps.

3
DBD

Ou vous pouvez simplement suivre ces étapes: 1. Désactiver le défilement de la tableView. 2. Définissez la contrainte de hauteur sur la table et sur un IBOutlet qui y est connecté. 3. Avant de recharger les données, calculez la hauteur de la table. heightConstraint.constant = (heightOfTheSingleTableViewCell) * numOfRows

2
Slavcho

Vous devrez incorporer votre UITableView dans un UIScrollView de la taille de l'écran moins la barre de navigation. Définissez l'arrière-plan UIScrollViews sur clearColor pour permettre à votre contenu situé au-dessus de UITableView de rester visible.

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

Il ne peut pas faire défiler car contentSize n'est pas assez grand. Vous devez augmenter la longueur totale de votre contenu qui se trouve au-dessus de scrollView. 

0
Ohmy

Oui, vous pouvez utiliser "tableView: viewForHeaderInSection".

0
zucknet