静态单元格中UITableViewCell中UIDatePicker的高度被破坏

时间:2015-01-28 15:58:00

标签: ios uitableview swift uidatepicker

我正在尝试将UIDatePicker放入UITableViewCell,通过单击其上方的单元格打开/关闭它。挑选者似乎都是错误的。首先,这是来自UITableView类的相关代码:

// Determines if the date picker should be shown
var editingDate: Bool = false

override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
    if indexPath.section == 1 && indexPath.row == 1 { // Picker cell
        if !self.editingDate {
            return 0
        }
    }

    return super.tableView(tableView, heightForRowAtIndexPath: indexPath)
}

override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
    if indexPath.section == 1 && indexPath.row == 0 { // Date cell
        self.editingDate = !self.editingDate
        tableView.reloadRowsAtIndexPaths([NSIndexPath(forRow: 1, inSection: 1)], withRowAnimation: .Fade)
    }
}

故事板中的表格:

storyboard

我在故事板中将表格单元格设置为自定义高度219。下面是我当前点击日期字段时会发生什么的动画GIF。抱歉可怕的质量。

animation

我注意到我们可以从上面的动画gif看到细胞背景变得透明(不是白色),这意味着细胞的内容视图没有伸展到整个高度。我想知道为什么会这样?

编辑:以下是DatePicker使用的约束:

constraints

2 个答案:

答案 0 :(得分:3)

如果您使用静态单元格,则可以在情节提要编辑器中指定包含选取器的单元格的高度,您的代码可能如下所示:

if (indexPath.section == 1 && indexPath.row == 1 && !editingDate) { // Picker cell
        return 0
} 

return super.tableView(tableView, heightForRowAtIndexPath: indexPath)

<强>更新

替换:

tableView.reloadRowsAtIndexPaths([NSIndexPath(forRow: 1, inSection: 1)], withRowAnimation: .Fade)

使用:

tableView.beginUpdates()
tableView.endUpdates()

答案 1 :(得分:0)

您使用的是AutoLayout吗?

如果是这样的话,尝试通过CTRL将单元格的边缘从它拖到单元格来固定你的DatePicker。在将所有4个边缘固定之后再试一次。