Я использую код ниже, чтобы избавиться от последней статической разделительной линии нижней ячейки, и она отлично работает в тех случаях, когда мне не нужно перезагружать tableView. После перезагрузки появляется разделительная строка tableView.

Только код в супер ВК:

override func viewDidLoad() {
    super.viewDidLoad()
    let footerFrame = CGRect(x: 0.0, y: 0.0, width: 
    tableView.frame.size.width, height: 1.0)
    tableView.tableFooterView = UIView(frame: footerFrame)
}

И после звонка:

fileprivate func showDatePicker()
{
    datePicker.setValue(UIColor.white, forKey: "textColor")
    showsDatePicker = true

    tableView.beginUpdates()
    tableView.endUpdates()

    tableView.contentInset = UIEdgeInsets(top: -20.0, left: 0.0, 
    bottom: 0.0, right: 0.0)
}

В tableView моего ребенка (didSelectRowAt indexPath: _) я просто изменяю высоту ячейки с помощью выбора даты в:

func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {

    guard showsDatePicker else {
       switch indexPath.row {
        case CellIndex.withDatePicker:
            return 0.0
        default:
            return 44.0 
        }
    }

    switch indexPath.row {
        case CellIndex.withDatePicker:
            return 217.0
        default:
            return 44.0 
        }
}

И после этого у меня нарисована разделительная линия! Может быть, это из-за использования ячеек STATIC, и единственный способ - добавить пустые представления для каждого viewController в раскадровке? Замена tableView.tableFooterView = UIView() на viewDid/WillLayoutSubviews вызывает эффект пустого экрана. Я не хочу добавлять пустой вид ко всем моим контроллерам в раскадровке, может быть, есть способ сделать это программно?

1
Dmitriy Ivashin 28 Май 2017 в 07:27

2 ответа

Лучший ответ

Перед отображением вашей последней ячейки.

if indexPath.row == Your_last_Cell {

  cell.separatorInset = UIEdgeInsetsMake(0, cell.bounds.size.width, 0, 0);

}

Создать нижний колонтитул с минимальной высотой:

func tableView(_ tableView: UITableView, 
heightForFooterInSection section: Int) -> CGFloat{

// This will create a "invisible" footer
     return 0.01f; //CGFLOAT_MIN
}

Или

func tableView(_ tableView: UITableView, 
 viewForFooterInSection section: Int) -> UIView?{

UIView(frame: CGRectZero)

}
1
Maddy 29 Май 2017 в 06:25

Мой подход к достижению этого результата заключается в следующем,

В вашей функции viewDidLoad

override func viewDidLoad() {
    super.viewDidLoad()
    // Add this line
    yourTableView.tableFooterView = UIView()
}

Определите количество секций для табличного представления

func numberOfSectionsInTableView(tableView: UITableView) -> Int {
    return 2
}

И в вашей функции cellForRowAtIndexPath,

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
var cell: UITableViewCell?
switch indexPath.section {
    case 0:
        cell = tableView.dequeueReusableCellWithIdentifier("yourfirstcell")
        if indexPath.row == yourLastRowIndex {
        self.separatorInset = UIEdgeInsetsMake(0, self.bounds.size.width, 0, 0)
    }
    case 1:
        cell = tableView.dequeueReusableCellWithIdentifier("yoursecondcell")
    default:
        break
    }
    return cell!
}

Этот подход поможет вам.

0
Praveen Kumar 30 Май 2017 в 07:00