Grüße, ich lese, dass das Standardverhalten darin UITableView
besteht, Abschnittsüberschriftenzeilen an den oberen Rand der Tabelle zu heften, während Sie durch die Abschnitte scrollen, bis der nächste Abschnitt die vorherige Abschnittszeile aus der Ansicht verdrängt.
Ich habe ein UITableView
Inside A UIViewController
und dies scheint nicht der Fall zu sein.
Ist das nur das falsche Verhalten für UITableViewController
?
Hier ist ein vereinfachter Code, der auf dem basiert, was ich habe. Ich zeige die UIController
Benutzeroberfläche und jede Tabellenansichtsmethode, die ich zum Erstellen der Tabellenansicht implementiert habe. Ich habe eine Hilfsdatenquellenklasse, mit deren Hilfe ich meine Objekte für die Verwendung mit der Tabelle indizieren kann.
@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
quelle
quelle
Antworten:
Die Header bleiben nur fest, wenn die
UITableViewStyle
Eigenschaft der Tabelle auf gesetzt istUITableViewStylePlain
. Wenn Sie es eingestellt habenUITableViewStyleGrouped
, werden die Überschriften mit den Zellen nach oben gescrollt.quelle
initWithStyle:UITableViewStylePlain
, da der Aufruf von tableView.style = UITableViewStylePlain nicht funktioniert.Ändern Sie Ihren TableView-Stil:
Gemäß Apple-Dokumentation für UITableView:
Hoffe, diese kleine Änderung wird Ihnen helfen ..
quelle
Plain
nicht seinGrouped
Swift 3.0
Erstellen Sie einen ViewController mit den Protokollen UITableViewDelegate und UITableViewDataSource . Erstellen Sie dann eine Tabellenansicht darin und deklarieren Sie ihren Stil als UITableViewStyle.grouped . Dadurch werden die Header korrigiert.
quelle
Sie können auch die Eigenschaft bounces der Tabellenansicht auf NO setzen. Dadurch bleiben die Abschnittsüberschriften nicht schwebend / statisch, aber Sie verlieren auch die Bounce-Eigenschaft der Tabellenansicht.
quelle
um den Header von UITableView-Abschnitten nicht klebrig oder klebrig zu machen:
Ändern Sie den Stil der Tabellenansicht - gruppieren Sie sie für nicht klebrig und machen Sie sie für klebrige Abschnittsüberschriften deutlich - vergessen Sie nicht: Sie können dies vom Storyboard aus tun, ohne Code zu schreiben. (Klicken Sie auf Ihre Tabellenansicht und ändern Sie den Stil im rechten Menü Seite / Komponente.)
Wenn Sie zusätzliche Komponenten wie benutzerdefinierte Ansichten usw. haben, überprüfen Sie bitte die Ränder der Tabellenansicht, um ein geeignetes Design zu erstellen. (wie Höhe der Kopfzeile für Abschnitte und Höhe der Zelle am Indexpfad, Abschnitte)
quelle
quelle