UITableViewCell Separator disappearing in iOS7

前端 未结 30 711
轮回少年
轮回少年 2020-12-07 08:31

I have some strange issue with UITableView only in iOS 7.

UITableViewCellSeparator disappears above the first row and below the last row. S

相关标签:
30条回答
  • 2020-12-07 09:18

    As someone else mentioned, this problem seems to manifest in a variety of ways. I resolved my issue via the following workaround:

    [tableView beginUpdates];
    [tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationNone];
    [tableView endUpdates];
    
    0 讨论(0)
  • 2020-12-07 09:19

    Based on @ortwin-gentz's comment, this solution works for me in iOS 9.

    func fixCellsSeparator() {
    
        // Loop through every cell in the tableview
        for cell: UITableViewCell in self.tableView.visibleCells {
    
            // Loop through every subview in the cell which its class is kind of SeparatorView
            for subview: UIView in (cell.contentView.superview?.subviews)!
                where NSStringFromClass(subview.classForCoder).hasSuffix("SeparatorView") {
                    subview.hidden = false
            }
        }
    
    }
    

    (Swift code)

    I use fixCellsSeparator() function after calling endUpdates() in some methods of my tableView, for example:

    override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
    
        //  Perform some stuff
        //  ...
    
        self.tableView.endUpdates()
        self.fixCellsSeparator()
    
    }
    

    I hope this solution will be helpfull for someone!

    0 讨论(0)
  • 2020-12-07 09:21

    Setting the style in viewWillAppear worked for me.

    0 讨论(0)
  • 2020-12-07 09:22

    Quite surprisingly, changing cell's separatorInset value back and forth seems to be working:

    NSIndexPath *selectedPath = [self.controller.tableView indexPathForSelectedRow];
    [self.controller.tableView deselectRowAtIndexPath:selectedPath animated:YES];
    
    UITableViewCell *cell = [self.controller.tableView cellForRowAtIndexPath:selectedPath];
    UIEdgeInsets insets = cell.separatorInset;
    cell.separatorInset = UIEdgeInsetsMake(0.0, insets.left + 1.0, 0.0, 0.0);
    cell.separatorInset = insets;
    
    0 讨论(0)
  • 2020-12-07 09:23

    I also had the problem of this inconsistent separator line display at the bottom of my UITableView. Using a custom footer view, I have been able to create a similar line and to display it on top of the potential existing one (which was sometimes missing).

    The only problem of this solution is that Apple may change one day the thickness of the line

    - (UIView*) tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section
    {
        float w = tableView.frame.size.width;
    
        UIView * footerView =  [[UIView alloc] initWithFrame:CGRectMake(0, 0, w, 1)];
        footerView.autoresizingMask = UIViewAutoresizingFlexibleWidth;
        footerView.clipsToBounds=NO;
    
        UIView* separatoraddon = [[UIView alloc] initWithFrame:CGRectMake(0, -.5, w, .5)];
        separatoraddon.autoresizingMask = UIViewAutoresizingFlexibleWidth;
        separatoraddon.backgroundColor = tableView.separatorColor;
        [footerView addSubview:separatoraddon];
    
        return footerView;
    }
    - (CGFloat) tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section
    {
        return 1;
    }
    
    0 讨论(0)
  • 2020-12-07 09:23

    I also ran into this problem in our project. My table view had a tableFooterView which could make this happen. I found the separator below the last row would appear if I removed that tableFooterView.

    0 讨论(0)
提交回复
热议问题