如何给tableview中的两个单元格之间的空间?
我想在表格视图中的两个单元格之间的空间,
我想要这样的细胞,
我怎样才能做到这一点?
你也可以在UITableView中创build一个TableView部分…这个方法是强制性的,所以创build部分,并在每个部分中创build单个单元格,如图所示。
你不能直接设置单元格之间的距离,但是你可以在部分中设置头部的高度来获得相同的结果。
1.设置你需要的单元格数量作为部分:
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { return 3; // in your case, there are 3 cells }
2.每个部分只返回1个单元格
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { return 1; }
3.设置区域中标题的高度来设置单元格之间的空间
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section { return 10.; // you can have your own choice, of course }
4.设置标题的背景颜色来清除颜色,所以它不会看起来怪异
- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section { UIView *headerView = [[UIView alloc] init]; headerView.backgroundColor = [UIColor clearColor]; return headerView; }
在TableView中的两个单元格之间获得空间的最佳方法,以这种方式声明numberofsections的委托方法中所需的部分的数量
例如,你有10个对象的数组
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { return [array count]; //array count returns 10 } - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { return 1;// this should be one because it will create space between two cells if you want space between 4 cells you can modify it. }
那么重要的一点是在cellForRowAtIndexPath委托方法中你需要使用indexpath.section而不是indexpath.row
cell.textLabel.text=[NSString stringWithFormat:@"%@",[array objectAtIndex:indexPath.section]];
这是检查你的tableview两个单元格之间的空间。 请享用!
多个部分的答案将工作,但它非常脆弱,不允许实际部分。 相反,您应该创build一个自定义单元格,或者在底部和/或顶部有一个间隙的自定义单元格原型。
在IB中使用你的支撑和弹簧来保持这个均匀的间隙,并使用heightForRowAtIndexPath返回一个包含间隙的高度。
目标 – C
UIView* separatorLineView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 3)];/// change size as you need. separatorLineView.backgroundColor = [UIColor whiteColor];// you can also put image here [cell.contentView addSubview:separatorLineView];
Swift 3
var separatorLineView = UIView(frame: CGRect(x: 0, y: 0, width: 320, height: 3)) /// change size as you need. separatorLineView.backgroundColor = UIColor.white // you can also put image here cell.contentView.addSubview(separatorLineView)
它为我工作。
如果有人在寻找Swift版本。 干得好。
func tableView(tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat { return 10; // space b/w cells } func numberOfSectionsInTableView(tableView: UITableView) -> Int { return items.count // count of items } func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? { let header = UIView() header.backgroundColor = UIColor.clearColor() return header } func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return 1 }
对于那些正在寻找替代方法来显示单元格之间的空白而不使用部分的人,您可能想要显示像下面那样的替代颜色和高度。 使用clearColor
作为间距。
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { tableView.separatorStyle = UITableViewCellSeparatorStyleNone; if (indexPath.row % 2 == 1) { static NSString *CellIdentifier = @"cellID1"; UITableViewCell *cell = (UITableViewCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier]; if (cell == nil) { cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; } cell.backgroundColor = [UIColor colorWhite]; return cell; } else { static NSString *CellIdentifier2 = @"cellID2"; UITableViewCell *cell2 = (UITableViewCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier2]; if (cell2 == nil) { cell2 = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier2]; } cell2.backgroundColor = [UIColor clearColor]; return cell2; } } - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { if (indexPath.row % 2 == 1) { return 40.0; } else { return 2.0; } }
有时候,你可能真的想保持tableview分成几行,并有1个部分。 例如,如果您需要显示该表格视图的自定义标题时,可能会发生这种情况,当您滚动该部分时,该标题将保留在原位。
在这种情况下,我会推荐做的是返回一个比单元正常高度更大的浮点数:
- (float)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
然后确保表格样式是普通的,并且单元格分隔符是没有的。 你可以在XIB文件本身或代码中做到这一点:
self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone; self.tableView.style = UITableViewStylePlain;
也许还可以将单元格的select样式添加到无(否则,看起来像您select的不仅仅是单元格的可见部分)。
cell.selectionStyle = UITableViewCellSelectionStyleNone;
这将给单元格之间的空间留下印象,但同时将它们保持为一行中的行(有时是你想要的)。
我已经使用了一个简单而快速的方法(使用故事板)
- 在你的控制器中添加UITableView
- 将分隔符样式设置为none(从属性检查器)
- 将行高设置为从所需高度的顶部和底部多5点
- 现在在单元格中添加一个图像,从左侧和右侧将其固定,但留下5个点的空间(用于像填充一样的感觉),并将图像的背景设置为与单元所需的背景相同
当表格视图被加载时,会感觉到单元格之间有空格。
在返回单元格之前,在cellForRowAtIndexPath
UITableViewDelegate
方法中添加这些行。
let separator = UIView(frame: CGRectMake(0, 0, cell!.bounds.size.width, 1)) separator.backgroundColor = UIColor.whiteColor() cell.contentView.addSubview(separator)
对于像你的截图中的单元格之间的间距,不需要自定义单元格(无论如何,像渐变bkg等等,这可能是一个好主意,但这不会帮助您的间距细胞)
要实现这种间距,只需使用UITableView中的不同部分即可。
[编辑]一切都在苹果的TableView编程指南 (这是值得一读的,因为它包含了很多你应该知道关于tableviews的东西)
你试图在视觉上达到什么目的,就像在一个容器视图中添加一个灰色背景的每个单元格的内容,并在单元格内部有该视图一样。 我不认为有必要在单元格之间添加空格。
*使用IOS 9 XCODE 7.3 *
实现这个最直接的方法是简单地将此代码添加到您的cellForRowAtIndexPath方法。
cell.separatorInset.left = 20.0 cell.separatorInset.right = 20.0 cell.separatorInset.top = 20.0 cell.separatorInset.bottom = 20.0 cell.layer.borderWidth = 3 cell.layer.cornerRadius = 20.0 cell.layer.borderColor = UIColor.flatSkyBlueColorDark().CGColor
然后去你的故事板,点击桌面视图。 转到身份检查器并将视图的背景颜色更改为方法中设置的任何边框颜色。 瞧! 玩这些值来获得所需的输出。 希望这可以帮助!
注意:如果使用Chameleon库,您必须为代码中的视图设置背景颜色,而不是通过故事板插件。 由于某种原因,颜色似乎被阴影遮住了。
那么我所做的就是简单地通过创build一个比我想要的更大的简单自定义单元格(cell + gap / 2)来模拟这个空间,然后把我所有的单元格的内容放在一个内部视图中。
然后把你的单元格的最顶层的视图作为背景的颜色,将内部视图作为你的实际单元格。 而且,当单元之间有空间的时候,你会有这样的错觉,实际上它只是一个有边界的较大的单元。
我不知道为什么所有的答案都很复杂。 KIS,只使用storyboard我已经把一个UIView放在tableCell内容视图中; 现在UIView的高度小于内容视图高度,就是这样!
使用“内容视图”颜色和UIView颜色播放以获得所需的结果。
我使用Swift的简单解决scheme:
// Inside UITableViewCell subclass override func layoutSubviews() { let f = contentView.frame let fr = UIEdgeInsetsInsetRect(f, UIEdgeInsetsMake(10, 10, 10, 10)) contentView.frame = fr }
或一行代码
override func layoutSubviews() { contentView.frame = UIEdgeInsetsInsetRect(contentView.frame, UIEdgeInsetsMake(10, 10, 10, 10)) }
结果
在Table View DataSource中有两个方法,分别命名为节数和行数在节return 3; 在行中返回1;
您不必为每个单元分配每个部分。 只要在你的单元格内创build一个UIView(容器),用单元格的视图来保存它。 而且我们在该容器上布置组件,如标签,文本,图像。
我build议创build一个自定义的UITableViewCell基类,并像下面这样使用这个类,
- 创build自定义的UITableViewCell类
- 在新类中创build一个UIView,这将作为'baseContentView',它将是'UITableViewCell.contentView'
- 从父视图(UITableViewCell.contentView)调整“baseContentView”(这将是分隔符/间隙)的顶部“填充”
- 从这个类inheritance所有的自定义类而不是UITableViewCell
- 将所有内容/子视图添加到“baseContentView”而不是“self.contentView”
你可以根据你的需要玩“填充”。
-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { return __titlesArray.count; } - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { return 1; } -(CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section { return 10; } -(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section { UIView *header = [[UIView alloc]init]; header.backgroundColor = [UIColor clearColor]; return header; }
我使用像:
override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat { return 194.0; } override func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) { cell.contentView.backgroundColor = UIColor.clearColor() let whiteRoundedView : UIView = UIView(frame: CGRectMake(0, 0, self.view.frame.size.width, 185)) whiteRoundedView.backgroundColor = UIColor( red: CGFloat(61.0/255.0), green: CGFloat(117.0/255.0), blue: CGFloat(147.0/255.0), alpha: CGFloat(1.0)) whiteRoundedView.layer.masksToBounds = false whiteRoundedView.layer.cornerRadius = 3.0 whiteRoundedView.layer.shadowOffset = CGSizeMake(-1, 1) whiteRoundedView.layer.shadowOpacity = 0.5 cell.contentView.addSubview(whiteRoundedView) cell.contentView.sendSubviewToBack(whiteRoundedView) }
从以下位置获取颜色代码RGB值:
1)首先在表格视图中创build2个部分。 2)创build一个空单元格。 3)用你想要显示的数据创build单元格。 4)使用该方法
-
(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {if(indexPath.section == 0){
if(indexPath.row%2!= 1){return 15.0; } else {return 100; 其他
if (indexPath.row % 2 != 1) { return 100.0; } else { return 15.0; }
}
这将增加单元格之间的空间。 它为我工作。
这里是我用Swift 3的方法:
在ViewDidLoad()中,添加:
self.tableView.rowHeight = 500.0
在tableview“CellForRowAt”中添加以下内容:
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) // Configure the cell... var actualContentView = UIView() actualContentView.frame = CGRect(x: 10, y: 10, width: cell.contentView.frame.width - 20, height: cell.contentView.frame.height - 20) actualContentView.backgroundColor = UIColor.blue cell.contentView.addSubview(actualContentView) return cell }
我已经检查了所有的答案,但我认为这是最简单的方法:
UIView * theContentView = [UIView alloc]initWithFrame:CGRectMake(0,gap,width,height)]; theContentView.backgroundcolor = [UIColor lightGrayColor];//contentColor cell.backgroundcolor = [UIColor blackColor];//gapColor [cell addSubview: theContentView]
原型代码说你可以创build一个子视图来显示单元格的内容,剩下的就是你想要的空白。