UITableView Separator Style Question

前端 未结 3 1866
面向向阳花
面向向阳花 2020-12-10 17:09

I have a tableview that is blank by default. User can add cells to it.

I want the separator lines to be clear when there are no cells, and grey when there are cells

相关标签:
3条回答
  • 2020-12-10 17:50

    Maybe you are missing this?

    ...
    else
    {
        self.routineTableView.separatorStyle = UITableViewCellSeparatorStyleSingleLine; // or you have the previous 'None' style...
        self.routineTableView.separatorColor = [UIColor grayColor];
    }
    

    EDIT : You need this but not only this... According to Apple Documentation :

    The value of this property is one of the separator-style constants described in UITableViewCell Class Reference class reference. UITableView uses this property to set the separator style on the cell returned from the delegate in tableView:cellForRowAtIndexPath:.

    That means the style wont change for cells that are already loaded. Just scrolling the table to force cells to redraw should make separators appearing...

    You then have to :

    1. set it BEFORE cell is inserted

      OR

    2. reload tableView when the first cell is added

    which is not easy to do with a NSFetchedResultsController, you should look into its delegate for a solution... or change direction, like hiding the tableView until you have a result maybe...


    EDIT 2 : You can also simply add this :

    [self.tableView reloadData];
    

    but that's a dirty workaround that will just reload full tableView, losing most benefits of NSFetchedResultsController...

    0 讨论(0)
  • 2020-12-10 17:56

    This changes the boolean flag of whether there will be a separator or not. Put this in viewDidLoad:

    self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
    

    And to make sure you've really made it go away, set the seperatorColor property to whatever the background color of the view and cell would be:

    // If the background is white
    self.tableView.separatorColor = [UIColor whiteColor];
    

    So then even if somehow the above does not get called and the separator is still persisting - it would be the same color as what is behind it, therefore invisible.

    Good luck.

    0 讨论(0)
  • 2020-12-10 18:09

    A quick fix I usually do is:

    #pragma mark - UITableViewDelegate
    
    - (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {
    
        if ([tableView respondsToSelector:@selector(setSeparatorStyle:)]) {
            [tableView setSeparatorStyle:UITableViewCellSeparatorStyleNone];
        }
    }
    
    0 讨论(0)
提交回复
热议问题