How to customize tableView separator in iPhone

前端 未结 12 1975
夕颜
夕颜 2020-11-28 20:49

By default there is a single line separator in uitableview.

But I want to put my customized line as a separator.

Is it possible? How?

12条回答
  •  栀梦
    栀梦 (楼主)
    2020-11-28 21:29

    If you need different seperator colors for different rows OR you want the seperator to remain visible when the row is highlighted on tap then try this:

    self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
    
    // We have to use the borderColor/Width as opposed to just setting the 
    // backgroundColor else the view becomes transparent and disappears during 
    // the cell's selected/highlighted animation
    UIView *separatorView = [[UIView alloc] initWithFrame:CGRectMake(0, 43, 1024, 1)];
    separatorView.layer.borderColor = [UIColor redColor].CGColor;
    separatorView.layer.borderWidth = 1.0;
    [cell.contentView addSubview:separatorView];
    

    This assumes your cell's background color is transparent.


    The above solution came out of some extensive experimentation. Here's some notes on my findings that I'm sure will help people:

    In the normal “not selected” state

    • The contentView (whats in your XIB unless you coded it otherwise) is drawn normally
    • The selectedBackgroundView is HIDDEN
    • The backgroundView is visible (so provided your contentView is transparent you see the backgroundView or (if you have not defined a backgroundView you'll see the background colour of the UITableView itself)

    A cell is selected, the following occurs immediately with-OUT any animation:

    • All views/subviews within the contentView have their backgroundColor cleared (or set to transparent), label etc text color's change to their selected colour
    • The selectedBackgroundView becomes visible (this view is always the full size of the cell (a custom frame is ignored, use a subview if you need to). Also note the backgroundColor of subViews are not displayed for some reason, perhaps they're set transparent like the contentView). If you didn't define a selectedBackgroundView then Cocoa will create/insert the blue (or gray) gradient background and display this for you)
    • The backgroundView is unchanged

    When the cell is deselected, an animation to remove the highlighting starts:

    • The selectedBackgroundView alpha property is animated from 1.0 (fully opaque) to 0.0 (fully transparent).
    • The backgroundView is again unchanged (so the animation looks like a crossfade between selectedBackgroundView and backgroundView)
    • Only once the animation has finished does the contentView get redrawn in the "not-selected" state and its subview backgroundColor's become visible again (this can cause your animation to look horrible so it is advisable that you don't use UIView.backgroundColor in your contentView)

提交回复
热议问题