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];
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
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];
j'ai une solution pour toi,
utiliser seulement tableView est suffisant
faire de la "Vue d'aperçu" comme HeaderView de votre tableView
faites la "barre de recherche" comme en-tête de section Voir votre tableView
vous pouvez le faire parfaitement :)
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.
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
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.
Oui, vous pouvez utiliser "tableView: viewForHeaderInSection".