UITableView section index spacing on iOS 7

前端 未结 7 1626
再見小時候
再見小時候 2020-12-28 14:55

On iOS 6, my UITableView\'s section index would distribute all of its items evenly across the height of the table view. In iOS 7 all of the items are clumped together in the

7条回答
  •  伪装坚强ぢ
    2020-12-28 15:26

    Here is a implementation of Anton Malmygin answer, you can add more space by just adding more empty itens on the array:

    First, let's create an array with the fake index.

        NSArray *array = self.mydataArray; // here are your true index
        self.sectionsTitle = [NSMutableArray array];
        int n = array.count;
    
        // In IOS 7 all index of the items are clumped together in the middle,
        // making the items difficult to tap.
        // As workaround we added "fake" sections index
        // reference: https://stackoverflow.com/questions/18923729/uitableview-section-index-spacing-on-ios-7
    
        for (int i = 0; i < n; i++){
            [self.sectionsTitle  addObject:array[i]];
            [self.sectionsTitle  addObject:@""];
        }
    

    Then, you can implement tableview delegate methods with the following approach:

    - (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
    {
        // In IOS 7 all index of the items are clumped together in the middle,
        // making the items difficult to tap.
        // As workaround we added "fake" sections index
        // reference: https://stackoverflow.com/questions/18923729/uitableview-section-index-spacing-on-ios-7
        if ([sectionsTitle[section] isEqualToString:@""]){
            return 0;
        }
        return x; // return your desire section height 
    }
    
    - (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
    {
        // In IOS 7 all index of the items are clumped together in the middle,
        // making the items difficult to tap.
        // As workaround we added "fake" sections index
        // reference: https://stackoverflow.com/questions/18923729/uitableview-section-index-spacing-on-ios-7
        if ([sectionsTitle[section] isEqualToString:@""]){
            return nil;
        }else{
           // return your desire header view here, 
           // if you are using the default section header view, 
           // you don't need to implement this method
           return // return your custom view
        }
    }
    
    - (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView {
        return self.sectionsTitle;
    }
    
    - (NSInteger)tableView:(UITableView *)tableView sectionForSectionIndexTitle:(NSString *)title atIndex:(NSInteger)index {
        // In IOS 7 all index of the items are clumped together in the middle,
        // making the items difficult to tap.
        // As workaround we added "fake" sections index
        // reference: https://stackoverflow.com/questions/18923729/uitableview-section-index-spacing-on-ios-7
        if ([title isEqualToString:@""]){
             return -1;
        }
        return [sectionsTitle indexOfObject:title];
    }
    
    
    - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
    {
        // In IOS 7 all index of the items are clumped together in the middle,
        // making the items difficult to tap.
        // As workaround we added "fake" sections index
        // reference: https://stackoverflow.com/questions/18923729/uitableview-section-index-spacing-on-ios-7
        if ([sectionsTitle[section] isEqualToString:@""]){
            return 0;
        }
        return // your logic here;
    }
    

    And here is the result:

    enter image description here

提交回复
热议问题