UITableView的一些常用细节设置

去掉tableView headerView的粘性

去掉UItableview headerView黏性,使 UITableViewStylePlain Style 的TableView header 不浮动,像Group Style 那样固定,跟随Tableview 滚动,而不会停在顶端。


- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
    if (scrollView == tableView)
    {
        CGFloat sectionHeaderHeight = 44;
        if (scrollView.contentOffset.y<=sectionHeaderHeight&&scrollView.contentOffset.y>=0)
        {
            scrollView.contentInset = UIEdgeInsetsMake(-scrollView.contentOffset.y, 0, 0, 0);
        }
        else if (scrollView.contentOffset.y>=sectionHeaderHeight)
        {
            scrollView.contentInset = UIEdgeInsetsMake(-sectionHeaderHeight, 0, 0, 0);
        }
    }
}


同时关闭区头和区脚,这里用swift代码,其实和OC很容易转化的

//关闭区头区脚的粘性
    func scrollViewDidScroll(scrollView: UIScrollView)
    {
        if(scrollView == self.bigTableView)
        {
            let sectionFooterHeight:CGFloat = 10
            let offsetY = bigTableView?.contentOffset.y
            if (offsetY >= 0 && offsetY <= headerHeight)
            {
                self.bigTableView!.contentInset = UIEdgeInsetsMake(-offsetY!, 0, -sectionFooterHeight, 0);
            }
            else if (offsetY >= headerHeight && offsetY <= self.bigTableView!.contentSize.height - self.bigTableView!.frame.size.height - sectionFooterHeight)
            {
                self.bigTableView!.contentInset = UIEdgeInsetsMake(-headerHeight!, 0, -sectionFooterHeight, 0);
            }
            else if (offsetY >= self.bigTableView!.contentSize.height - self.bigTableView!.frame.size.height - sectionFooterHeight && offsetY <= self.bigTableView!.contentSize.height - self.bigTableView!.frame.size.height)
            {
                self.bigTableView!.contentInset = UIEdgeInsetsMake(-offsetY!, 0, -(self.bigTableView!.contentSize.height - self.bigTableView!.frame.size.height - sectionFooterHeight), 0);
            }
        }
    }


 UITableViewCell分割线左边部分缺失的解决方法(cell分割线左边不到边问题)

这里图方便放swift的代码了

//重置cell分割线 使之左边顶格
    override func viewDidLayoutSubviews()
    {
        if((tableView?.respondsToSelector("setSeparatorInset:")) != nil)
        {
            tableView?.separatorInset = UIEdgeInsetsZero
        }
        if((tableView?.respondsToSelector("setLayoutMargins:")) != nil)
        {
            tableView?.layoutMargins = UIEdgeInsetsZero
        }
        
    }
    func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath)
    {
        if(cell.respondsToSelector("setSeparatorInset:"))
        {
            cell.separatorInset = UIEdgeInsetsZero
        }
        if(cell.respondsToSelector("setLayoutMargins:"))
        {
            cell.layoutMargins = UIEdgeInsetsZero
        }

    }

试了一下,不用写 override func viewDidLayoutSubviews() 这个方法就能实现。


UITableView自动滚动到指定行、UITableViewCell自动滚动到顶部

如tableview窗口可以显示 30 行, 我想在填充tableview 100 条数据后 选择第 50行, 能把这一行显示到窗口内, 就像手动拖滚动条到 第 50行一样,要如何实现呢?

首先使用selectRowAtIndexes: 选择行数,滚动的话tableview的superview时scrollview,scrollview可以滚动到某个position 那么就要计算这个position position = table row height * index,就得到滚动的位置了。

 [self.tableView selectRowAtIndexPath:[NSIndexPath indexPathForRow:_currentRow inSection:0]
animated:YES
  scrollPosition:UITableViewScrollPositionMiddle];

UITableViewCell自动滚动到顶部

[tableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0] atScrollPosition:UITableViewScrollPositionTop animated:YES];




你可能感兴趣的:(ios,UITableView,headerview)