Salam, saya membaca bahwa perilaku default dari UITableView
adalah menyematkan baris tajuk bagian ke atas tabel saat Anda menggulir bagian-bagian tersebut sampai bagian berikutnya mendorong baris bagian sebelumnya keluar dari tampilan.
Saya memiliki bagian UITableView
dalam a UIViewController
dan tampaknya tidak demikian.
Apakah itu hanya perilaku yang sebenarnya UITableViewController
?
Berikut beberapa kode yang disederhanakan berdasarkan apa yang saya miliki. Saya akan menunjukkan UIController
antarmuka dan setiap metode tampilan tabel yang telah saya terapkan untuk membuat tampilan tabel. Saya memiliki kelas sumber data pembantu yang membantu saya mengindeks objek saya untuk digunakan dengan tabel.
@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
sumber
sumber
Jawaban:
Header hanya tetap jika
UITableViewStyle
properti tabel diatur keUITableViewStylePlain
. Jika Anda telah mengaturnya keUITableViewStyleGrouped
, header akan menggulir ke atas dengan sel.sumber
initWithStyle:UITableViewStylePlain
, karena memanggil sesuatu seperti tableView.style = UITableViewStylePlain tidak akan berfungsi.Ubah Gaya TableView Anda:
Sesuai dokumentasi apple untuk UITableView:
Semoga perubahan kecil ini akan membantu Anda ..
sumber
Plain
, bukanGrouped
Swift 3.0.0
Buat ViewController dengan UITableViewDelegate dan UITableViewDataSource protokol. Kemudian buat tableView di dalamnya, deklarasikan gayanya menjadi UITableViewStyle.grouped . Ini akan memperbaiki header.
sumber
Anda juga dapat menyetel properti pantulan tampilan tabel ke TIDAK. Ini akan membuat header bagian tidak mengambang / statis, tetapi kemudian Anda juga kehilangan properti pantulan dari tableview.
sumber
untuk membuat header bagian UITableView tidak lengket atau lengket:
ubah gaya tampilan tabel - buat dikelompokkan agar tidak lengket & buat polos untuk header bagian yang lengket - jangan lupa: Anda dapat melakukannya dari storyboard tanpa menulis kode. (klik pada tampilan tabel Anda dan ubah gayanya dari sisi kanan / menu komponen)
jika Anda memiliki komponen tambahan seperti tampilan kustom atau lain-lain, harap periksa margin tampilan tabel untuk membuat desain yang sesuai. (seperti tinggi header untuk bagian & tinggi sel di jalur indeks, bagian)
sumber
sumber