2010-04-17 79 views

回答

23

我不是100%確定這將適用於表格標題,但它適用於表格行,所以它值得一試。我有一個實例變量headerHeight最初設定爲44.0和我改變它像這樣:

- (void)changeHeight { 
    [self.tableView beginUpdates]; 
    headerHeight = 88.0; 
    [self.tableView endUpdates]; 
} 

在我的代碼我在heightForRowAtIndexPath返回headerHeight,但你可以嘗試在heightForHeaderInSection

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section { 
    return headerHeight; 
} 
+0

感謝@ prendio2運作良好。但它無法刪除視圖(這是我試圖做的)。但只要我滾動它被刪除,所以多數民衆贊成在任何與我有相同用例的人(他們想刪除視圖) – jasongregori 2012-02-13 22:33:26

+1

,你可以保留對它的引用並使用'removeFromSuperview'方法它在動畫期間正確隱藏它。 – jasongregori 2012-02-13 22:41:51

+3

這很好,但彈出的區域覆蓋了我的第一個UITableViewCell。有任何想法嗎?發生這種情況時,如何將tableView向下移動? – arooo 2013-02-28 11:11:11

-1

我沒有測試過這一點,但有時我得到不必要的動畫時,我UITableViewCells改變高度。原因是我繪製了自己的細胞,我使用CALayers來做。在細胞的(void)layoutSubviews我會改變我的CALayer的大小爲幀的大小爲細胞

myLayer.frame = self.bounds; 

當的CALayer的變化幀/ bounds屬性,它是動畫。所以在理論上,我會說你可以使用方法tableView:viewForHeaderInSection:這將允許你繪製自己的節標題。你可以只返回一個實現(void)layoutSubviews,然後在這個方法做

self.layer.frame = self.bounds; 

只是一個想法一個UIView。

11

該作品:

flatHeader = YES; 
[UIView beginAnimations:nil context:NULL]; 
[UIView setAnimationDuration:0.3]; 
[[self tableView] beginUpdates]; 
[[self tableView] endUpdates]; 
CGRect frame = [[self headerView] frame]; 
frame.size.height = [self tableView:[self tableView] heightForHeaderInSection:0]; 
[[self headerView] setFrame:frame]; 
[UIView commitAnimations]; 
2

我在斯威夫特的解決方案:

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() 
     }) 
    } 
} 
相關問題