Как добавить интервал между UITableViewCell
Есть ли способ добавить расстояние между UITableViewCell
?
Я создал таблицу, и каждая ячейка содержит только изображение. Изображение присваивается ячейке следующим образом:
cell.imageView.image = [myImages objectAtIndex:indexPath.row];
но это делает изображение увеличенным и вписывается во всю ячейку, и между изображениями нет промежутков.
Или, скажем, таким образом, высота изображения, например, 50, и я хочу добавить 20 интервалов между изображениями. Есть ли способ сделать это?
36 ответов
ТаблицаViewCell ->
override open var frame: CGRect {
get {
return super.frame
}
set {
var frame = newValue
frame.size.height -= 2
super.frame = frame
}
}
Добавьте внутренний вид к ячейке, затем добавьте свои собственные представления к ней.
Чтобы добавить интервал между строками, следует использовать вторую ячейку-прототип.
Добавьте другой идентификатор ячейки во вторую ячейку прототипа, затем добавьте пустое представление и ограничьте его края краями ячейки, а затем установите для цвета 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
}
}
Используйте UITableViewDelegate, heightForRowAtIndexPath
и верните высоту строки.
(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
return 100.0f ;
}
Решение Swift 5.0
Внутри подкласса UITableViewCell
override func layoutSubviews() {
super.layoutSubviews()
let padding = UIEdgeInsets(top: 0, left: 0, bottom: 10, right: 0)
bounds = UIEdgeInsetsInsetRect(bounds, padding)
}
Вот реальное решение
используйте разделы вместо строк, потому что каждая строка имеет 1 раздел, поэтому вы можете выделить место для заголовка и нижнего колонтитула раздела, вот код, просто вставьте его в свой класс viewcontroller, где вы создаете выход tableview
если вы хотите, чтобы верхний интервал просто использовал heightForHeaderInSection, если вы хотите нижний интервал, просто используйте heightForFooterInSection, как показано ниже
просто скопируйте и вставьте это
func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
return 20
}
func tableView(_ tableView: UITableView, viewForFooterInSection section: Int) -> UIView? {
let v = UIView()
v.backgroundColor = UIColor.clear
return v
}
func numberOfSections(in tableView: UITableView) -> Int {
return 10
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 1
}