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

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

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

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

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


当前回答

查看我在GitHub上的解决方案,其中包含UITableView的子类,并使用Objective-C的运行时特性。 它基本上使用了苹果的私有数据结构uitableviewwrodata,我得到了搜索UITableView的私有运行时头:

https://github.com/JaviSoto/iOS10-Runtime-Headers/blob/master/Frameworks/UIKit.framework/UITableView.h,

这里是你想要的私有类,它包含了你需要的所有东西来布局你的单元格的空间,而不需要在单元格的类中设置它:

https://github.com/JaviSoto/iOS10-Runtime-Headers/blob/master/Frameworks/UIKit.framework/UITableViewRowData.h

其他回答

只是把对我有用的答案添加到答案池中。

我已经在TableViewCell中添加了一个视图(紫色视图),我使用它作为单元格的内容视图。并限制紫色视图在顶部和底部都有填充,或者其他你想要的,但我认为这种方式创造了更多的灵活性。

你必须为你的图像设置框架。未测试的代码是

cell.imageView.frame = CGRectOffset(cell.frame, 10, 10);

我可以想到三种方法:

Create a custom table cell that lays out the view of the entire cell in the manner that you desire Instead of adding the image to the image view, clear the subviews of the image view, create a custom view that adds an UIImageView for the image and another view, perhaps a simple UIView that provides the desired spacing, and add it as a subview of the image view. I want to suggest that you manipulate the UIImageView directly to set a fixed size/padding, but I'm nowhere near Xcode so I can't confirm whether/how this would work.

明白吗?

为了增加行之间的间距,将使用第二个原型单元格。

在第二个原型单元格中添加一个不同的单元格标识符,然后添加一个空视图,并将其边缘约束到单元格的边缘,然后将emptyView的颜色设置为“clear”。

然后在代码中:

import UIKit

class YourViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
        
        @IBOutlet weak var yourTableView: UITableView!
        
        let yourArray = ["data1", "data2", "data3" /* so on */ ]

        let emptyTransparentRowHeight: CGFloat = 10
        
        override func viewDidLoad() {
            super.viewDidLoad()
    
            yourTableView.dataSource = self
            yourTableView.delegate = self
        }
            

        func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
            return (yourArray.count * 2)
        }
        
        func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
            
            guard indexPath.row % 2 == 0,
                let usableCell = tableView.dequeueReusableCell(withIdentifier: "Your First Cell Prototype Identifier") as? YourTableViewCellSubClass
            else {
                
                return tableView.dequeueReusableCell(withIdentifier: "The Second and Empty Cell Prototype Identifier")!
            }
      
            usableCell.Label?.text = yourArray[indexPath.row/2]
            
            return usableCell
    
        }
        
        func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
            if indexPath.row % 2 == 0 {
                return tableView.rowHeight
            }
            
            return self.emptyTransparentRowHeight
        }
        
    }

我认为这是最干净的解决方案:

class MyTableViewCell: UITableViewCell {
    override func awakeFromNib() {
        super.awakeFromNib()
        layoutMargins = UIEdgeInsetsMake(8, 0, 8, 0)
    }
}