当我滚动tableview时,我怎样才能使headerView滚动(不留在tableview的顶部)和UItableViewCell一起

时间:2013-12-31 08:24:58

标签: ios uitableview

在plainsytle tableview中,我们通过委托方法

为每个部分设置headerViews
-(UIView*)tableView:(UITableView*)tableView viewForHeaderInSection:(NSInteger)section 

所以,当我向上滚动tableview时,第一部分的headerView始终显示在tableview的顶部,然后该部分完全消失在tableview上,然后第二部分的headerView将显示在tableview的顶部。所以我的问题是我如何使用youitableViewCell制作headerView滚动,就像组样式tableview一样?

8 个答案:

答案 0 :(得分:14)

您可以通过将表属性更改为 -

来禁用滚动sectionHeader
UITableViewStyleGrouped

你必须在初始化UITableView时设置它。

  • 从StoryBoard设置

OR

UITableView* table = [[UITableView alloc]initWithFrame:myFrame style:UITableViewStyleGrouped]; 

答案 1 :(得分:12)

继承UITableView并覆盖此方法

- (BOOL)allowsHeaderViewsToFloat{
    return NO;
}

页脚相同

- (BOOL)allowsFooterViewToFloat{
    return NO;
}

但我认为这是一个私有API ...你将无法将其提交给AppStore

如果您将其上传到AppStore;那你还有两个选择

  1. 添加普通单元格而不是节标题
  2. 如果您只有一个部分,那么您只需使用表头而不是部分标题

答案 2 :(得分:7)

我有同样的问题,当我浏览时,我来到这个链接See The accepted answer,我得出结论,你需要将tableViewHeader Style设置为Group并且它可以正常工作。

答案 3 :(得分:5)

只需将表格样式从“普通”更改为“分组”即可。

答案 4 :(得分:2)

如果您有多个部分,则可以使用某些第三方API自定义

否则你可以使用Grouped表而不是普通的tableView来尝试这个。

当您将自定义视图指定为tableView标题视图时,请尝试这样,它将成为表格的标题视图,并将使用表格视图滚动

 -(UIView*)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
    {
        UIView *sectionView =[[UIView alloc]initWithFrame:CGRectMake(0, 0, 320, 200)];

        tableView.tableHeaderView =sectionView;

        return sectionView;
    }

答案 5 :(得分:0)

将表格的UITableViewStyleUITableViewStylePlain更改为UITableViewStyleGrouped,这将使标题与单元格一起向上滚动。

答案 6 :(得分:0)

迅速:

正如Hani Ibrahim指出的那样,您需要继承UITableView。苹果说你: must specify style at creation.

所以:

override init(frame: CGRect, style: UITableViewStyle) {
        super.init(frame: frame, style: .grouped)

注意我的super.init如何使用.grouped作为样式。 对于这种样式的表视图(.grouped),Apple还说:

Summary

A table view whose sections present distinct groups of rows. The section headers and footers do not float.

然后,您可以调用以下tableView委托方法: viewForHeaderInSectionheightForHeaderInSection (请注意,这些仅用于页眉,如果需要页脚,也可以使用页脚副本)

func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
        let headerLabel = UILabel()
        headerLabel.text = "My cool header title"
        headerLabel.textAlignment = .center
        headerLabel.font = UIFont(name: "OpenSans-Bold", size: 16)
        return headerLabel
}
func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
        return 44
    }

那应该做到的!祝你好运。

答案 7 :(得分:0)

您可以更改tableView的样式。

let tableView = UITableView(frame: .zero, style: .grouped)