我在斯威夫特的解決方案:
class MyTableViewController: UITableViewController {
var sectionHeaderView:UIView?
...
override func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
sectionHeaderView = UIView(frame: CGRectMake(0, 0, self.tableView.frame.size.width, 30))
sectionHeaderView?.backgroundColor = UIColor.grayColor()
var button = UIButton(frame: CGRectMake(0, 0, self.tableView.frame.size.width, 30))
button.backgroundColor = UIColor.darkGrayColor()
button.setTitle("collapse/expand", forState: .Normal)
button.addTarget(self, action: "collapseOrExpandSectionHeader", forControlEvents: .TouchUpInside)
sectionHeaderView?.addSubview(button)
return sectionHeaderView
}
...
override func tableView(tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
if let sectionHeader = sectionHeaderView {
return view.frame.size.height
} else {
return 30.0
}
}
...
func collapseOrExpandSectionHeader() {
if let sectionHeader = sectionHeaderView {
let headerHeight:CGFloat
if sectionHeader.frame.size.height == 200 {
headerHeight = 30.0
} else {
headerHeight = 200.0
}
UIView.animateWithDuration(0.3, animations: {
self.tableView?.beginUpdates()
sectionHeader.frame.size.height = headerHeight
self.tableView?.endUpdates()
})
}
}
感謝@ prendio2運作良好。但它無法刪除視圖(這是我試圖做的)。但只要我滾動它被刪除,所以多數民衆贊成在任何與我有相同用例的人(他們想刪除視圖) – jasongregori 2012-02-13 22:33:26
,你可以保留對它的引用並使用'removeFromSuperview'方法它在動畫期間正確隱藏它。 – jasongregori 2012-02-13 22:41:51
這很好,但彈出的區域覆蓋了我的第一個UITableViewCell。有任何想法嗎?發生這種情況時,如何將tableView向下移動? – arooo 2013-02-28 11:11:11