Це справді давнє запитання, але все-таки це один із перших записів у Google при пошуку, як видалити верхній і нижній роздільники для кожного розділу.
Після деякого розслідування я з’ясував, що Apple не має можливості і просто не має наміру зробити це якось без глупо ускладнених хакерів ієрархії поглядів.
На щастя, існує абсолютно простий і легкий спосіб досягти такого вигляду:
Я кажу просто, але для новачків це може бути складно через відсутність розуміння того, як UITableView
працює і як реалізувати власні клітини. Дозвольте спробувати пояснити це:
- Створіть
UITableViewCell
підклас
- У комірці створіть
@IBOutlet weak var separatorView: UIView!
властивість
- У своїй Раскадровці виберіть комірку viewview таблиці та виберіть власну комірку як клас, який створює резервну копію комірки. Примітка : Вам не потрібно використовувати власний стиль. Ви все ще можете використовувати Basic, Subtitle тощо.
- Встановіть
UITableView
S Separator Style
в None
приховати роздільник за замовчуванням
- Перетягніть a
UIView
на клітинку та змініть розмір, щоб він знаходився внизу (або вгорі) комірки. Використовуйте Size Inspector
s, Autoresizing
щоб закріпити його, щоб почати / закінчити / знизу і надати йому гнучку ширину (або авторозкладку, але в цьому випадку це трохи зверху)
- Підключіть подання до розетки вашого класу стільникового зв’язку
- У вашому
UITableViewDataSource
s cellForRowAtIndexPath:
встановіть isHidden
властивість власного роздільника, виходячи з того, чи indexPath.row
є останній рядок (або перший, якщо ваш погляд знаходиться вгорі) у розділі
Ось приклад коду:
class MyCell: UITableViewCell {
@IBOutlet weak var separatorView: UIView!
}
class ViewController: UITableViewController {
override func numberOfSections(in tableView: UITableView) -> Int {
return 3
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 3
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) as! MyCell
cell.separatorView.isHidden = indexPath.row == 2
return cell
}
}
І ось кілька скріншотів:
Так, це певна робота, але просто неможливо щось дістати безкоштовно під час кодування. Зрештою, ми програмісти, і кодування нам вирішувати нам. Завжди краще витратити 5-10 хвилин на це налаштування, ніж просто копіювати вставку якогось хакерського коду, який може не працювати в майбутньому, коли Apple вирішить змінити ієрархію подання.
Написати цю відповідь насправді було більше праці, ніж впровадження роздільника. Я також шукав просте і швидке рішення, але врешті-решт просто не було достатньо хорошого, яке, на мою думку, було варте використання.
Я сподіваюся, ви також відчуваєте скептицизм, коли бачите цикли for-ітерації, що перебирають підпідготовки комірок, щоб приховати або навіть видалити подання під час виконання з ієрархії подань, яку Apple надає вам, коли просто, за рогом є просте, універсальне, стабільне та надійне рішення . 7 маленьких кроків - це справді все, що вам потрібно, і їх легко зрозуміти.
UIView
s у клітинку як підроблені роздільники. Сподіваємось, є кращий варіант.