Salutations, je lis que le comportement par défaut de UITableView
est d'épingler les lignes d'en-tête de section en haut du tableau lorsque vous faites défiler les sections jusqu'à ce que la section suivante repousse la ligne de section précédente.
J'ai un UITableView
intérieur UIViewController
et cela ne semble pas être le cas.
Est-ce juste le comportement par défaut pour UITableViewController
?
Voici un code simplifié basé sur ce que j'ai. Je vais montrer l' UIController
interface et chaque méthode de vue de table que j'ai implémentée pour créer la vue de table. J'ai une classe de source de données d'assistance qui m'aide à indexer mes objets à utiliser avec la table.
@interface MyUIViewController ()<UITableViewDelegate, UITableViewDataSource>
@property (nonatomic, readonly) UITableView *myTableView;
@property (nonatomic, readonly) MyCustomHelperDataSource *helperDataSource;
@end
//when section data is set, get details for each section and reload table on success
- (void)setSectionData:(NSArray *)sections {
super.sectionData = sections; //this array drives the sections
//get additional data for section details
[[RestKitService sharedClient] getSectionDetailsForSection:someId
success:^(RKObjectRequestOperation *operation, RKMappingResult *details) {
NSLog(@"Got section details data");
_helperDataSource = [[MyCustomHelperDataSource alloc] initWithSections:sections andDetails:details.array];
[myTableView reloadData];
} failure:^(RKObjectRequestOperation *operation, NSError *error) {
NSLog(@"Failed getting section details");
}];
}
#pragma mark <UITableViewDataSource, UITableViewDelegate>
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
if (!_helperDataSource) return 0;
return [_helperDataSource countSectionsWithDetails]; //number of section that have details rows, ignore any empty sections
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
//get the section object for the current section int
SectionObject *section = [_helperDataSource sectionObjectForSection:section];
//return the number of details rows for the section object at this section
return [_helperDataSource countOfSectionDetails:section.sectionId];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell * cell;
NSString *CellIdentifier = @"SectionDetailCell";
cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:CellIdentifier];
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];
cell.textLabel.font = [UIFont systemFontOfSize:12.0f];
}
//get the detail object for this section
SectionObject *section = [_helperDataSource sectionObjectForSection:indexPath.section];
NSArray* detailsForSection = [_helperDataSource detailsForSection:section.sectionId] ;
SectionDetail *sd = (SectionDetail*)[detailsForSection objectAtIndex:indexPath.row];
cell.textLabel.text = sd.displayText;
cell.detailTextLabel.text = sd.subText;
cell.detailTextLabel.textColor = [UIColor blueTextColor];
return cell;
}
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
return 50.0f;
}
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section {
return 30.0f;
}
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger) section {
//get the section object for the current section
SectionObject *section = [_helperDataSource sectionObjectForSection:section];
NSString *title = @"%@ (%d)";
return [NSString stringWithFormat:title, section.name, [_helperDataSource countOfSectionDetails:section.sectionId]];
}
- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {
UIView *header = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 260, 0)];
header.autoresizingMask = UIViewAutoresizingFlexibleWidth;
header.backgroundColor = [UIColor darkBackgroundColor];
SSLabel *label = [[SSLabel alloc] initWithFrame:CGRectMake(3, 3, 260, 24)];
label.font = [UIFont boldSystemFontOfSize:10.0f];
label.verticalTextAlignment = SSLabelVerticalTextAlignmentMiddle;
label.backgroundColor = [UIColor clearColor];
label.text = [self tableView:tableView titleForHeaderInSection:section];
label.textColor = [UIColor whiteColor];
label.shadowColor = [UIColor darkGrayColor];
label.shadowOffset = CGSizeMake(1.0, 1.0);
[header addSubview:label];
return header;
}
ios
objective-c
uitableview
topwik
la source
la source
Réponses:
Les en-têtes ne restent fixes que lorsque la
UITableViewStyle
propriété de la table est définie surUITableViewStylePlain
. Si vous l'avez défini surUITableViewStyleGrouped
, les en-têtes défileront avec les cellules.la source
initWithStyle:UITableViewStylePlain
, car appeler quelque chose comme tableView.style = UITableViewStylePlain ne fonctionnera pas.Changez votre style TableView:
Selon la documentation Apple pour UITableView:
J'espère que ce petit changement vous aidera.
la source
Plain
, pasGrouped
Swift 3.0
Créez un ViewController avec les protocoles UITableViewDelegate et UITableViewDataSource . Créez ensuite un tableView à l'intérieur, en déclarant que son style est UITableViewStyle.grouped . Cela corrigera les en-têtes.
la source
Vous pouvez également définir la propriété bounces de tableview sur NO. Cela gardera les en-têtes de section non flottants / statiques, mais vous perdrez également la propriété de rebond de la vue table.
la source
pour rendre l'en-tête des sections UITableView non collant ou collant:
changez le style de la vue du tableau - rendez-le groupé pour non collant et rendez-le clair pour les en-têtes de section collants - n'oubliez pas: vous pouvez le faire à partir du storyboard sans écrire de code. (cliquez sur votre vue de tableau et changez son style dans le menu latéral droit / composant)
si vous avez des composants supplémentaires tels que des vues personnalisées ou etc., veuillez vérifier les marges de la vue du tableau pour créer un design approprié. (comme la hauteur de l'en-tête pour les sections et la hauteur de la cellule au chemin d'index, les sections)
la source
la source