it-swarm.dev

UITableView مع رؤوس القسم الثابت

مع تحياتي ، أقرأ أن السلوك الافتراضي لـ UITableView هو تثبيت صفوف رأس القسم بأعلى الجدول أثناء التمرير خلال الأقسام حتى يقوم القسم التالي بدفع صف قسم previos إلى خارج العرض.

لدي UITableView داخل UIViewController ولا يبدو أن هذا هو الحال.

هل هذا مجرد سلوك defualt لـ UITableViewController؟

إليك بعض التعليمات البرمجية المبسطة استنادًا إلى ما لدي. سأعرض واجهة UIController وطريقة عرض كل جدول قمت بتطبيقها لإنشاء طريقة عرض الجدول. لدي فئة مصدر بيانات مساعد تساعدني في فهرسة الكائنات الخاصة بي للاستخدام مع الجدول.

    @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;
}
95
topwik

تبقى الرؤوس ثابتة فقط عند تعيين الخاصية UITableViewStyle للجدول على UITableViewStylePlain. إذا قمت بتعيينها على UITableViewStyleGrouped ، فستنتقل الرؤوس للأعلى مع الخلايا.

272
bachonk

يمكنك أيضًا تعيين خاصية ارتداد tableview إلى NO. سيؤدي ذلك إلى الحفاظ على رؤوس الأقسام غير عائمة/ثابتة ، ولكن بعد ذلك ستفقد خاصية الارتداد في عرض الجدول.

3
kevinl

سويفت 3.0

إنشاء ViewController مع UITableViewDelegate و UITableViewDataSource البروتوكولات. ثم قم بإنشاء جدول عرض بداخله ، موضحًا أن نمطه سيكون UITableViewStyle.grouped . هذا سيصلح الرؤوس.

lazy var tableView: UITableView = {
    let view = UITableView(frame: UIScreen.main.bounds, style: UITableViewStyle.grouped)
    view.delegate = self
    view.dataSource = self
    view.separatorStyle = .none
    return view
}()
2
Nursultan Askarbekuly

تغيير نمط TableView الخاص بك:

self.tableview = [[[UITableViewخصيص] initwithFrame: نمط الإطار: UITableViewStyleGrouped]؛

وفقًا لوثائق Apple الخاصة بـ UITableView:

UITableViewStylePlain- طريقة عرض جدول عادي. يتم عرض أي رؤوس أو تذييلات قسم على هيئة فواصل مضمّنة وتطفو عندما يتم تمرير عرض الجدول.

UITableViewStyleGrouped- طريقة عرض جدول تقدم أقسامها مجموعات مميزة من الصفوف. لا تطفو رؤوس الصفحات وتذييلاتها.

آمل أن يساعدك هذا التغيير الصغير ..

2
Aks

جعل رأس أقسام UITableView غير مثبت أو مثبت:

  1. غيّر نمط عرض الجدول - اجعله مُجمَّعًا على أنه غير لاصق واجعله سهلًا على رؤوس الأقسام اللاصقة - لا تنسَ: يمكنك القيام بذلك من لوحة العمل دون كتابة رمز. (انقر على عرض الجدول الخاص بك وتغييره هو النمط من القائمة الجانب الأيمن/المكون)

  2. إذا كان لديك مكونات إضافية مثل طرق العرض المخصصة أو ما إلى ذلك ، فالرجاء التحقق من هوامش عرض الجدول لإنشاء تصميم مناسب. (مثل ارتفاع الرأس للأقسام وارتفاع الخلية في مسار الفهرس والأقسام)

0
Burcu K. Kutluay

الآن تبدو طريقة عرض الجدول الخاصة بك مثل نمط جدول عادي ولكن لا تطفو على مجموعة إعدادات نمط الجدول إلى مجموعة.

[_tableView setBackgroundView:nil];
_tableView.backgroundColor = [UIColor whiteColor];
0
Ravi Kumar