有没有办法增加UITableViewCell之间的间距?

我已经创建了一个表,每个单元格只包含一个图像。图像被这样分配给单元格:

cell.imageView.image = [myImages objectAtIndex:indexPath.row];

但这使得图像放大并适合整个细胞,并且图像之间没有间隔。

或者让我们这样说,图像的高度是50,我想在图像之间增加20的间距。有什么办法可以做到吗?


当前回答

使用节而不是行 每个section应该返回一行 使用indexPath分配单元格数据。Section,而不是row 实现UITableView委托方法hightforheader并返回你想要的间距

其他回答

是的,你可以增加或减少间距(填充)之间的两个单元格通过创建一个基本视图的内容视图在单元格。为内容视图背景设置清晰的颜色,您可以调整基本视图的高度以创建单元格之间的空间。

如果你不想改变你的表视图的section和行号(就像我做的那样),下面是你要做的:

1)在表格单元格视图的底部添加一个ImageView。

2)使它与表格视图的背景颜色相同。

我已经在我的应用程序中这样做了,它工作得很好。干杯!: D

在阅读其他人的答案后再读这篇文章

我想警告所有想要使用像添加标题这样的解决方案来达到间隔目的的人。如果你这样做,你将不能动画单元格的插入,删除等。例如,如果您使用该方法,您可能会得到这种错误

无效更新:无效的节数。更新后(6)表视图中包含的section数量必须等于更新前(5)表视图中包含的section数量,加上或减去插入或删除的section数量(插入0个,删除0个)。

如果你需要动画插入和删除行,我会在单元格本身添加这个空间。如果你担心高亮显示,那么你可以重写方法 func setHighlighted(_ highlighted: Bool, animated: Bool) 然后自己设置高亮

使用UITableViewDelegate, highightforrowatindexpath并返回行高。

 (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
 return 100.0f ;
}

斯威夫特版本

Swift 3更新

为了方便以后的观众,这个答案比原来的问题更一般。它是Swift基本UITableView示例的补充示例。

概述

基本思想是为每个数组项创建一个新节(而不是新行)。然后,可以使用节头高度对节进行间隔。

怎么做

按照UITableView示例中的描述设置你的项目。(也就是说,添加一个UITableView并将tableView outlet连接到视图控制器)。 在Interface Builder中,将主视图背景颜色更改为浅蓝色,并将UITableView背景颜色更改为clear。 用以下代码替换ViewController.swift代码。

ViewController.swift

import UIKit
class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
    
    // These strings will be the data for the table view cells
    let animals: [String] = ["Horse", "Cow", "Camel", "Sheep", "Goat"]
    
    let cellReuseIdentifier = "cell"
    let cellSpacingHeight: CGFloat = 5
    
    @IBOutlet var tableView: UITableView!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        // These tasks can also be done in IB if you prefer.
        self.tableView.register(UITableViewCell.self, forCellReuseIdentifier: cellReuseIdentifier)
        tableView.delegate = self
        tableView.dataSource = self
    }
    
    // MARK: - Table View delegate methods
    
    func numberOfSections(in tableView: UITableView) -> Int {
        return self.animals.count
    }
    
    // There is just one row in every section
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return 1
    }
    
    // Set the spacing between sections
    func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
        return cellSpacingHeight
    }
    
    // Make the background color show through
    func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
        let headerView = UIView()
        headerView.backgroundColor = UIColor.clear
        return headerView
    }
    
    // create a cell for each table view row
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        
        let cell:UITableViewCell = self.tableView.dequeueReusableCell(withIdentifier: cellReuseIdentifier) as UITableViewCell!
        
        // note that indexPath.section is used rather than indexPath.row
        cell.textLabel?.text = self.animals[indexPath.section]
        
        // add border and color
        cell.backgroundColor = UIColor.white
        cell.layer.borderColor = UIColor.black.cgColor
        cell.layer.borderWidth = 1
        cell.layer.cornerRadius = 8
        cell.clipsToBounds = true
        
        return cell
    }
    
    // method to run when table view cell is tapped
    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        // note that indexPath.section is used rather than indexPath.row
        print("You tapped cell number \(indexPath.section).")
    }
}

注意indexPath。section而不是indexPath。行,以获得数组元素的正确值和点击位置。

你是如何在右边和左边得到额外的填充/空间的?

我得到它的方法和你给任何视图加空格的方法是一样的。我使用了自动布局约束。只需使用接口构建器中的引脚工具为开头和结尾约束添加间距。