在运行时更改UITableViewHeaderFooterView高度

时间:2016-07-31 16:15:10

标签: ios swift uitableview uitableviewsectionheader

我的目标是在运行时更改UITableView部分标题高度。让我更具体一点。默认高度为44但在触摸顶部之前滚动,高度将为64.我创建了UITableViewHeaderFooterView的子类,它使用自动布局。

我试过

var frame = sectionHeader.frame
frame.size.height = 64
sectionHeader.frame = frame

以及

tableView.sectionHeaderHeight = 64

但对我来说没什么用。任何人都可以对这个问题有所了解。

3 个答案:

答案 0 :(得分:1)

  1. 使用自动布局更改框架直接赢得了
  2. 要更改tableview部分标题,您需要实现委托方法并在更改后重新加载数据
  3.   

    可选的func tableView(_ tableView:UITableView,heightForHeaderInSection section:Int) - > CGFloat的

答案 1 :(得分:1)

您不需要对页脚进行子类化以改变我的身高。

  1. 检查您是否仅设置I' ts height :(无委托方法)
  2. tableView.sectionHeaderHeight = 64

    1. 检查你的电话或" reloadData()"在tableView之后。或
    2. [UIView setAnimationsEnabled:NO];

      [tableView beginUpdates];

      [tableView endUpdates];

      [UIView setAnimationsEnabled:YES];

      仅在不重新加载tableView的情况下更改高度。

答案 2 :(得分:0)

我认为你必须重新加载表视图的整个部分,因为没有公共API只用于更新部分标题。

self.isOnTop = true // or false
tableView.reloadSections(NSIndexSet(index: 0), withRowAnimation: .None)

并更改一个修改aproppriate委托方法返回值的属性:

func tableView(tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
    isOnTop ? 44 : 64
}

您还可以尝试以下方法,这些方法可以在不重新加载的情况下更新布局:

tableView.beginUpdates()
tableView.endUpdates()

或转移到支持tableview行为的集合视图解决方案:https://github.com/jamztang/CSStickyHeaderFlowLayout