隐藏分隔线在一个UITableViewCell

我正在自定义UITableView。我想隐藏在最后的单元格上分隔的行…我能这样做吗?

我知道我可以做tableView.separatorStyle = UITableViewCellStyle.None,但这将影响tableView的单元格所有。我希望它只影响最后一个单元格。

278807 次浏览

viewDidLoad中,添加这一行:

self.tableView.separatorColor = [UIColor clearColor];

cellForRowAtIndexPath中:

适用于iOS低版本

if(indexPath.row != self.newCarArray.count-1){
UIImageView *line = [[UIImageView alloc] initWithFrame:CGRectMake(0, 44, 320, 2)];
line.backgroundColor = [UIColor redColor];
[cell addSubview:line];
}

适用于iOS 7以上版本(包括iOS 8)

if (indexPath.row == self.newCarArray.count-1) {
cell.separatorInset = UIEdgeInsetsMake(0.f, cell.bounds.size.width, 0.f, 0.f);
}

试试下面的代码,也许能帮你解决问题

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {


NSString* reuseIdentifier = @"Contact Cell";


UITableViewCell* cell = [tableView dequeueReusableCellWithIdentifier:reuseIdentifier];
if (nil == cell) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:reuseIdentifier];
if (indexPath.row != 10) {//Specify the cell number
cell.backgroundView.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"bgWithLine.png"]];


} else {
cell.backgroundView.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"bgWithOutLine.png"]];


}


}


return cell;
}

如果你不想自己画分隔符,使用这个:

  // Hide the cell separator by moving it to the far right
cell.separatorInset = UIEdgeInsetsMake(0, 10000, 0, 0);

这个API只能从ios7开始使用。

UITableViewDataSource cellForRowAtIndexPath方法中

迅速:

if indexPath.row == {your row number} {
cell.separatorInset = UIEdgeInsets(top: 0, left: 0, bottom: 0, right: .greatestFiniteMagnitude)
}

或者:

cell.separatorInset = UIEdgeInsetsMake(0, 0, 0, UIScreen.main.bounds.width)

对于默认保证金:

cell.separatorInset = UIEdgeInsetsMake(0, tCell.layoutMargins.left, 0, 0)

显示端到端的分隔符

cell.separatorInset = .zero

objective - c:

if (indexPath.row == {your row number}) {
cell.separatorInset = UIEdgeInsetsMake(0.0f, 0.0f, 0.0f, CGFLOAT_MAX);
}

在ios7中,UITableView分组样式单元格分隔符看起来有点不同。它看起来有点像这样:

enter image description here

我尝试了Kemenaran的回答这样做:

cell.separatorInset = UIEdgeInsetsMake(0, 10000, 0, 0);

然而,这似乎对我不起作用。我不知道为什么。所以我决定使用Hiren的回答,但使用UIView而不是UIImageView,并在iOS 7风格中划线:

UIColor iOS7LineColor = [UIColor colorWithRed:0.82f green:0.82f blue:0.82f alpha:1.0f];


//First cell in a section
if (indexPath.row == 0) {


UIView *line = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, 1)];
line.backgroundColor = iOS7LineColor;
[cell addSubview:line];
[cell bringSubviewToFront:line];


} else if (indexPath.row == [self.tableViewCellSubtitles count] - 1) {


UIView *line = [[UIView alloc] initWithFrame:CGRectMake(21, 0, self.view.frame.size.width, 1)];
line.backgroundColor = iOS7LineColor;
[cell addSubview:line];
[cell bringSubviewToFront:line];


UIView *lineBottom = [[UIView alloc] initWithFrame:CGRectMake(0, 43, self.view.frame.size.width, 1)];
lineBottom.backgroundColor = iOS7LineColor;
[cell addSubview:lineBottom];
[cell bringSubviewToFront:lineBottom];


} else {


//Last cell in the table view
UIView *line = [[UIView alloc] initWithFrame:CGRectMake(21, 0, self.view.frame.size.width, 1)];
line.backgroundColor = iOS7LineColor;
[cell addSubview:line];
[cell bringSubviewToFront:line];
}

如果使用这个,请确保在第二个If语句中插入正确的表视图高度。我希望这对某些人有用。

iphone的宽度是320。因此,在单元格属性中为separatorInset设置左右值,大于320的一半。

- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
[self.tableView setSeparatorStyle:UITableViewCellSeparatorStyleNone];
}

跟踪Hiren的答案。

ViewDidLoad和下面的行:

self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;

或者,如果你正在使用XIB或故事板,将“分隔符”更改为“没有一个”:

Interface builder

并在CellForRowAtIndexPath中添加这个:

CGFloat separatorInset; // Separator x position
CGFloat separatorHeight;
CGFloat separatorWidth;
CGFloat separatorY;
UIImageView *separator;
UIColor *separatorBGColor;


separatorY      = cell.frame.size.height;
separatorHeight = (1.0 / [UIScreen mainScreen].scale);  // This assures you to have a 1px line height whatever the screen resolution
separatorWidth  = cell.frame.size.width;
separatorInset  = 15.0f;
separatorBGColor  = [UIColor colorWithRed: 204.0/255.0 green: 204.0/255.0 blue: 204.0/255.0 alpha:1.0];


separator = [[UIImageView alloc] initWithFrame:CGRectMake(separatorInset, separatorY, separatorWidth,separatorHeight)];
separator.backgroundColor = separatorBGColor;
[cell addSubView: separator];

这是一个结果的例子,我显示一个动态单元格的tableview(但只有一个内容)。结果是,只有一个有分隔符,而不是所有的“虚拟”tableview自动添加填充屏幕。

enter image description here

希望这能有所帮助。

编辑:对于那些不经常阅读注释的人来说,实际上有一种更好的方法,用几行代码来完成:

override func viewDidLoad() {
super.viewDidLoad()
tableView.tableFooterView = UIView()
}

iOS 7的更好解决方案;8

-(void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
DLog(@"");
if (cell && indexPath.row == 0 && indexPath.section == 0) {


DLog(@"cell.bounds.size.width %f", cell.bounds.size.width);
cell.separatorInset = UIEdgeInsetsMake(0.f, cell.bounds.size.width, 0.f, 0.0f);
}
}

如果你的应用是可旋转的-使用3000.0f作为左插入常数或在运行中计算它。 如果你试图设置右插入,你在iOS 8的单元格左侧有可见的分隔符部分

  if([_data count] == 0 ){
[self.tableView setSeparatorStyle:UITableViewCellSeparatorStyleNone];//  [self tableView].=YES;
} else {
[self.tableView setSeparatorStyle:UITableViewCellSeparatorStyleSingleLine];////    [self tableView].hidden=NO;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {


NSString *cellId = @"cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellId];
NSInteger lastRowIndexInSection = [tableView numberOfRowsInSection:indexPath.section] - 1;


if (row == lastRowIndexInSection) {
CGFloat halfWidthOfCell = cell.frame.size.width / 2;
cell.separatorInset = UIEdgeInsetsMake(0, halfWidthOfCell, 0, halfWidthOfCell);
}
}
你必须采取自定义单元格和添加标签和设置约束,如标签应覆盖整个单元格区域。

- (void)awakeFromNib {
// Initialization code
self.separatorInset = UIEdgeInsetsMake(0, 10000, 0, 0);
//self.layoutMargins = UIEdgeInsetsZero;
[self setBackgroundColor:[UIColor clearColor]];
[self setSelectionStyle:UITableViewCellSelectionStyleNone];
}

也设置UITableView布局边距如下

tblSignup.layoutMargins = UIEdgeInsetsZero;

如果接受的答案不成立,你可以试试这个:

- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section {
return 0.01f; }

太棒了;)

实现这一点的最佳方法是关闭默认的行分隔符,子类UITableViewCell,并添加一个自定义行分隔符作为contentView的子视图-参见下面的自定义单元格,用于表示类型为SNStock的对象,该对象具有两个字符串属性tickername:

import UIKit


private let kSNStockCellCellHeight: CGFloat = 65.0
private let kSNStockCellCellLineSeparatorHorizontalPaddingRatio: CGFloat = 0.03
private let kSNStockCellCellLineSeparatorBackgroundColorAlpha: CGFloat = 0.3
private let kSNStockCellCellLineSeparatorHeight: CGFloat = 1


class SNStockCell: UITableViewCell {


private let primaryTextColor: UIColor
private let secondaryTextColor: UIColor


private let customLineSeparatorView: UIView


var showsCustomLineSeparator: Bool {
get {
return !customLineSeparatorView.hidden
}
set(showsCustomLineSeparator) {
customLineSeparatorView.hidden = !showsCustomLineSeparator
}
}


var customLineSeparatorColor: UIColor? {
get {
return customLineSeparatorView.backgroundColor
}
set(customLineSeparatorColor) {
customLineSeparatorView.backgroundColor = customLineSeparatorColor?.colorWithAlphaComponent(kSNStockCellCellLineSeparatorBackgroundColorAlpha)
}
}


required init(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}


init(reuseIdentifier: String, primaryTextColor: UIColor, secondaryTextColor: UIColor) {
self.primaryTextColor = primaryTextColor
self.secondaryTextColor = secondaryTextColor
self.customLineSeparatorView = UIView(frame:CGRectZero)
super.init(style: UITableViewCellStyle.Subtitle, reuseIdentifier:reuseIdentifier)
selectionStyle = UITableViewCellSelectionStyle.None
backgroundColor = UIColor.clearColor()


contentView.addSubview(customLineSeparatorView)
customLineSeparatorView.hidden = true
}


override func prepareForReuse() {
super.prepareForReuse()
self.showsCustomLineSeparator = false
}


// MARK: Layout


override func layoutSubviews() {
super.layoutSubviews()
layoutCustomLineSeparator()
}


private func layoutCustomLineSeparator() {
let horizontalPadding: CGFloat = bounds.width * kSNStockCellCellLineSeparatorHorizontalPaddingRatio
let lineSeparatorWidth: CGFloat = bounds.width - horizontalPadding * 2;
customLineSeparatorView.frame = CGRectMake(horizontalPadding,
kSNStockCellCellHeight - kSNStockCellCellLineSeparatorHeight,
lineSeparatorWidth,
kSNStockCellCellLineSeparatorHeight)
}


// MARK: Public Class API


class func cellHeight() -> CGFloat {
return kSNStockCellCellHeight
}


// MARK: Public API


func configureWithStock(stock: SNStock) {
textLabel!.text = stock.ticker as String
textLabel!.textColor = primaryTextColor
detailTextLabel!.text = stock.name as String
detailTextLabel!.textColor = secondaryTextColor
setNeedsLayout()
}
}

禁用默认的行分隔符使用tableView.separatorStyle = UITableViewCellSeparatorStyle.None;。消费者方面相对简单,见下面的例子:

private func stockCell(tableView: UITableView, indexPath:NSIndexPath) -> UITableViewCell {
var cell : SNStockCell? = tableView.dequeueReusableCellWithIdentifier(stockCellReuseIdentifier) as? SNStockCell
if (cell == nil) {
cell = SNStockCell(reuseIdentifier:stockCellReuseIdentifier, primaryTextColor:primaryTextColor, secondaryTextColor:secondaryTextColor)
}
cell!.configureWithStock(stockAtIndexPath(indexPath))
cell!.showsCustomLineSeparator = true
cell!.customLineSeparatorColor = tintColor
return cell!
}

除非使用以下解决方法,否则无法在特定单元格上隐藏分隔符

- (void)layoutSubviews {
[super layoutSubviews];
[self hideCellSeparator];
}
// workaround
- (void)hideCellSeparator {
for (UIView *view in  self.subviews) {
if (![view isKindOfClass:[UIControl class]]) {
[view removeFromSuperview];
}
}
}

斯威夫特中使用iOS 8.4:

/*
Tells the delegate that the table view is about to draw a cell for a particular row. (optional)
*/
override func tableView(tableView: UITableView,
willDisplayCell cell: UITableViewCell,
forRowAtIndexPath indexPath: NSIndexPath)
{
if indexPath.row == 3 {
// Hiding separator line for only one specific UITableViewCell
cell.separatorInset = UIEdgeInsetsMake(0, cell.bounds.size.width, 0, 0)
}
}

注意:上面的代码片段将使用动态单元格在UITableView上工作。您可能遇到的唯一问题是,当您使用带有类别的静态单元格、不同于none的分隔符类型和表视图的分组样式时。事实上,在本例中,它不会隐藏每个类别的最后一个单元格。为了克服这个问题,我发现的解决方案是将单元格分隔符(通过IB)设置为none,然后手动(通过代码)创建并添加您的行视图到每个单元格。例如,请查看下面的代码片段:

/*
Tells the delegate that the table view is about to draw a cell for a particular row. (optional)
*/
override func tableView(tableView: UITableView,
willDisplayCell cell: UITableViewCell,
forRowAtIndexPath indexPath: NSIndexPath)
{
// Row 2 at Section 2
if indexPath.row == 1 && indexPath.section == 1 {
// Hiding separator line for one specific UITableViewCell
cell.separatorInset = UIEdgeInsetsMake(0, cell.bounds.size.width, 0, 0)


// Here we add a line at the bottom of the cell (e.g. here at the second row of the second section).
let additionalSeparatorThickness = CGFloat(1)
let additionalSeparator = UIView(frame: CGRectMake(0,
cell.frame.size.height - additionalSeparatorThickness,
cell.frame.size.width,
additionalSeparatorThickness))
additionalSeparator.backgroundColor = UIColor.redColor()
cell.addSubview(additionalSeparator)
}
}

对于Swift 2:

将以下行添加到viewDidLoad():

tableView.separatorColor = UIColor.clearColor()

对于iOS7或更高版本,更简洁的方法是使用INFINITY而不是硬编码的值。当屏幕旋转时,您不必担心更新单元格。

if (indexPath.row == <row number>) {
cell.separatorInset = UIEdgeInsetsMake(0, INFINITY, 0, 0);
}

我不相信这种方法在任何情况下都适用于动态单元格……

if (indexPath.row == self.newCarArray.count-1) {
cell.separatorInset = UIEdgeInsetsMake(0.f, cell.bounds.size.width, 0.f, 0.f);
}

不管你在哪个tableview方法中为动态单元格做这件事,你改变了inset属性的单元格总是有inset属性设置,现在每次它被退出队列时,都会导致缺少行分隔符的狂暴…除非你自己改变。

这样的方法对我很有效:

if indexPath.row == franchises.count - 1 {
cell.separatorInset = UIEdgeInsetsMake(0, cell.contentView.bounds.width, 0, 0)
} else {
cell.separatorInset = UIEdgeInsetsMake(0, 0, cell.contentView.bounds.width, 0)
}

这样你就可以在每次加载时更新数据结构状态

我的开发环境是

  • Xcode 7.0
  • 7A220 Swift 2.0
  • iOS 9.0

以上答案并不完全适用于我

经过尝试,我最终的工作解决方案是:

let indent_large_enought_to_hidden:CGFloat = 10000
cell.separatorInset = UIEdgeInsetsMake(0, indent_large_enought_to_hidden, 0, 0) // indent large engough for separator(including cell' content) to hidden separator
cell.indentationWidth = indent_large_enought_to_hidden * -1 // adjust the cell's content to show normally
cell.indentationLevel = 1 // must add this, otherwise default is 0, now actual indentation = indentationWidth * indentationLevel = 10000 * 1 = -10000

,效果是: enter image description here < / p >

我的要求是将分隔符隐藏在第4和第5单元格之间。我通过

    -(void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {
if(indexPath.row == 3)
{
cell.separatorInset = UIEdgeInsetsMake(0, cell.bounds.size.width, 0, 0);
}
}
in viewDidLoad() {


tableView.separatorStyle = UITableViewCellSeparatorStyle.None


}

使用这个子类,set separatorInset不适用于iOS 9.2.1,内容将被压缩。

@interface NSPZeroMarginCell : UITableViewCell


@property (nonatomic, assign) BOOL separatorHidden;


@end


@implementation NSPZeroMarginCell


- (void) layoutSubviews {
[super layoutSubviews];


for (UIView *view in  self.subviews) {
if (![view isKindOfClass:[UIControl class]]) {
if (CGRectGetHeight(view.frame) < 3) {
view.hidden = self.separatorHidden;
}
}
}
}


@end

https://gist.github.com/liruqi/9a5add4669e8d9cd3ee9

willdisplaycell:

cell.separatorInset = UIEdgeInsetsMake(0, cell.bounds.size.width, 0, 0)

正如(许多)其他人指出的那样,你可以通过简单地关闭整个UITableView本身来轻松隐藏所有 UITableViewCell分隔符;例如在你的UITableViewController中

- (void)viewDidLoad {
...
self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
...
}

不幸的是,它是一个真正的PITA在每个细胞基础上做的,这是你真正要求的。

就我个人而言,我已经尝试了许多改变cell.separatorInset.left的排列,再次,正如(许多)其他人所建议的那样,但问题是,引用Apple(强调添加):

...您可以使用此属性在当前单元格的contents与表的左右边缘之间添加空格。正插入值移动单元格内容和单元格分隔符向内并远离表边缘…

因此,如果你试图通过将分隔符推到屏幕的右侧来“隐藏”分隔符,你最终也会缩进你的单元格的contentView。正如crifan所建议的那样,你可以通过适当地设置cell.indentationWidthcell.indentationLevel来弥补这个讨厌的副作用,但我发现这也是不可靠的(内容仍然会缩进…)

我发现的最可靠的方法是在一个简单的UITableViewCell子类中覆盖layoutSubviews,并设置正确的嵌套,使其击中左侧嵌套,使分隔符宽度为0,因此不可见[这需要在layoutSubviews中完成以自动处理旋转]。我还向我的子类添加了一个方便的方法来打开它。

@interface MyTableViewCellSubclass()
@property BOOL separatorIsHidden;
@end


@implementation MyTableViewCellSubclass


- (void)hideSeparator
{
_separatorIsHidden = YES;
}


- (void)layoutSubviews
{
[super layoutSubviews];


if (_separatorIsHidden) {
UIEdgeInsets inset = self.separatorInset;
inset.right = self.bounds.size.width - inset.left;
self.separatorInset = inset;
}
}


@end

警告:没有可靠的方法来恢复原始右插入,所以你不能“取消隐藏”分隔符,因此我使用不可逆的hideSeparator方法(而不是暴露separatorIsHidden)。请注意,separatorInset在重用的单元格之间持续存在,因为你不能“取消隐藏”,你需要将这些隐藏的分隔单元格隔离在它们自己的reuseIdentifier中。

在iOS9上,我有一个问题,改变分隔符插入也会影响文本和细节标签的定位。

我用这个解出来了

override func layoutSubviews() {
super.layoutSubviews()


separatorInset = UIEdgeInsets(top: 0, left: layoutMargins.left, bottom: 0, right: width - layoutMargins.left)
}

在你的UITableViewCell子类中,覆盖layoutSubviews并隐藏_UITableViewCellSeparatorView。适用于iOS 10。

override func layoutSubviews() {
super.layoutSubviews()


subviews.forEach { (view) in
if view.dynamicType.description() == "_UITableViewCellSeparatorView" {
view.hidden = true
}
}
}
cell.separatorInset = UIEdgeInsetsMake(0.0, cell.bounds.size.width, 0.0, -cell.bounds.size.width)

在iOS 10.2中运行良好

enter image description here

迅速:

public func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {


...


// remove separator for last cell
cell.separatorInset = indexPath.row < numberOfRowsInSection-1
? tableView.separatorInset
: UIEdgeInsets(top: 0, left: tableView.bounds.size.width, bottom: 0, right: 0)


return cell
}

objective - c:

- (UITableViewCell *)tableView:(UITableView *)tableView
cellForRowAtIndexPath:(NSIndexPath *)indexPath {


...


// remove separator for last cell
cell.separatorInset = (indexPath.row < numberOfRowsInSection-1)
? tableView.separatorInset
: UIEdgeInsetsMake(0.f, tableView.bounds.size.width, 0.f, 0.f);


return cell;
}

斯威夫特3号,斯威夫特4号,斯威夫特5号中,你可以像这样写一个UITableViewCell的扩展:

extension UITableViewCell {
func separator(hide: Bool) {
separatorInset.left = hide ? bounds.size.width : 0
}
}

然后你可以这样使用它(当cell是你的cell实例时):

cell.separator(hide: false) // Shows separator
cell.separator(hide: true) // Hides separator

将表格视图单元格的宽度赋为左插入值比赋给它一些随机数更好。因为在某些屏幕尺寸中,也许不是现在,但将来你的分隔符仍然是可见的因为这个随机数可能不够。此外,在iPad横屏模式下,你不能保证你的分隔符总是不可见。

使用斯威夫特3并采用最快的破解方法,你可以使用扩展来改进代码:

extension UITableViewCell {


var isSeparatorHidden: Bool {
get {
return self.separatorInset.right != 0
}
set {
if newValue {
self.separatorInset = UIEdgeInsetsMake(0, self.bounds.size.width, 0, 0)
} else {
self.separatorInset = UIEdgeInsetsMake(0, 0, 0, 0)
}
}
}


}

然后,当你配置单元格时:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "identifier", for: indexPath)
switch indexPath.row {
case 3:
cell.isSeparatorHidden = true
default:
cell.isSeparatorHidden = false
}
return cell
}


func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
let cell = tableView.cellForRow(at: indexPath)
if cell.isSeparatorHidden {
// do stuff
}
}

当我使用扩展和调用layoutSubviews()立即更新布局视图时,它为我工作。

extension UITableViewCell {


func removeSeparator() {
separatorInset = UIEdgeInsetsMake(0, bounds.size.width, 0, 0)
}
}


override func layoutSubviews() {
super.layoutSubviews()


removeSeparator()
}

所有答案的代码将使单元格填充为零,而不是默认值。我在iOS 11 iPad Pro 12 "中看到了问题

但我有一个解决方案(“肮脏的hack”),那就是使一个空的部分,将使分隔线隐藏。

下面是我使用的代码:

typedef enum PXSettingsTableSections {
PXSettingSectionInvite = 0,
PXSettingSectionAccount,
PXSettingSectionPrivacy,
PXSettingSectionCreation,
PXSettingSectionTest,
PXSettingSectionAboutHide,  // invisble section just to hide separator Line
PXSettingSectionFooterHide, // invisble section just to hide separator Line
PXSettingSectionNumItems,
} PXSettingsTableSectionsType;




- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
// Return the number of sections.
return PXSettingSectionNumItems;
}




- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {


switch (section) {
case PXSettingSectionInvite: return 1;
case PXSettingSectionAccount:return (isSocialLogin) ? 1 : 2;
case PXSettingSectionPrivacy: return 1;
case PXSettingSectionCreation: return 2;
case PXSettingSectionTest: return 3;
case PXSettingSectionAboutHide: return 3;
default: return 0;
}
}




- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
{
switch(section)
{
case PXSettingSectionInvite: return nil;
case PXSettingSectionAccount: return @"Account";
case PXSettingSectionPrivacy: return @"Privacy";
case PXSettingSectionCreation: return @"Someting";
case PXSettingSectionTest: return @"Test";
case PXSettingSectionAboutHide: return @" ";
case PXSettingSectionFooterHide: return @" ";
}
return nil;
}




- (void)tableView:(UITableView *)tableView willDisplayHeaderView:(UIView *)view forSection:(NSInteger)section {


UITableViewHeaderFooterView *header = (UITableViewHeaderFooterView *)view;
if (section == PXSettingSectionFooterHide || section == PXSettingSectionAboutHide) {
// [UIColor clearColor] will not work
[header.contentView setBackgroundColor:[UIColor whiteColor]];
}
}




- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
// You can control here the size of one specific section
if(section == PXSettingSectionAboutHide){
return 0.0000001; //make it real small
}
return 45.0;
}




- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {


switch(indexPath.section)
{
case PXSettingSectionInvite:
return self.inviteCell;
case PXSettingSectionAccount:
if (isSocialLogin) {
return self.myWalletCell;
}
switch(indexPath.row)
{
case 0: return self.changePasswordCell;
case 1: return self.myWalletCell;
}
case PXSettingSectionPrivacy:
switch(indexPath.row)
{
case 0: return self.privateAccountCell;
}
case PXSettingSectionCreation:
switch(indexPath.row)
{
case 0: return self.videoResolutionCell;
case 1: return self.selfieMirrorCell;
}
case PXSettingSectionTest:
switch(indexPath.row)
{
case 0: return self.termsOfUseImageCell;
case 1: return self.attributionCell;
case 2: return self.aboutCell;
}
case PXSettingSectionAboutHide:{
switch(indexPath.row)
{
case 0: return self.clearCacheCell;
case 1: return self.feedbackCell;
case 2: return self.logoutCell;
}
}
}


return self.emptyCell;
}

在tableview单元格类中。放这行代码

separatorInset = UIEdgeInsets(top: 0, left: 0, bottom: 0, right: self.bounds.size.width)

更简单、更符合逻辑的做法是:

- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section
{
return [[UIView alloc] initWithFrame:CGRectZero];
}

在大多数情况下,您不希望只看到最后一个表视图单元格分隔符。这种方法只删除了最后一个表格视图单元格分隔符,你不需要考虑自动布局问题(即旋转设备)或硬编码值来设置分隔符嵌入。

在你的手机上设置separatorInset.right = .greatestFiniteMagnitude

对于那些专门寻找隐藏分隔线的尤里卡行,这是唯一的解决方案,为我工作:

     row.cellUpdate { (cell, row) in
cell.separatorInset =  UIEdgeInsets(top: 0, left: 0, bottom: 0, right: CGFloat.greatestFiniteMagnitude)
}

我能找到的唯一解决办法就是下一个

extension UITableViewCell {
func separator(hide: Bool) {
separatorInset.left = hide ? self.bounds.width * 1.5 : 16 // or whatever you want to be the left inset
}
}

我不知道为什么,但是self.bounds.width没有像预期的那样工作,所以我乘以1.5。

如果你想隐藏一个单元格,你只需要这样做:

cell.separator(hide: true)

对于其余的单元格,只发送参数为false

cell.separator(hide: false)

Swift 5 - iOS13+

当你定义你的表时,只需添加:

func tableView(_ tableView: UITableView, viewForFooterInSection section: Int) -> UIView? {
// Removes separator lines
tableView.separatorStyle = UITableViewCell.SeparatorStyle.none
return UIView()
}

神奇的行是tableView.separatorStyle = UITableViewCell.SeparatorStyle.none

Swift 5解决方案,Xcode 14.0.1

你在tableView中改变它,而不是在单元格中。

 self.tableView.separatorStyle = .none