美文网首页iOS开发资料收集
TableView Head Footer 不停留实现方式

TableView Head Footer 不停留实现方式

作者: anddygon | 来源:发表于2017-01-10 18:12 被阅读162次

    系统默认的header,footer停留挺棒的,但是有时候项目里设计明确不停留,这个时候就比较蛋疼,实现的方式比较多,下面提供一种比较简单的实现方式。

    思路:系统实现停留的方式是通过改变header,footer的frame.y来实现的,所以只需要按照我们的方式重写frame属性

    tableview上的内容视图是按照左->右,上->下的方式布局的,所以tableview通过datasource确定数据之后每一个header,cell,footer,section都有了确定的frame了。

    class TableViewHeaderFooterView: UIView {
        
        enum Style {
            case header, footer
        }
        /*当前header,footer所在的section的frame 通过UITableViewDelegate方法获取即可
         func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
             let rectForSection = tableView.rect(forSection: section)
             let header = TableViewHeaderFooterView(rectForSection: rectForSection, style: .header)
             header.backgroundColor = .red
             return header
         }
         */
        fileprivate(set) var rectForSection: CGRect
        fileprivate(set) var style: Style
        override var frame: CGRect {
            set{
                let sectionRect = rectForSection
                let top: CGFloat
                switch style {
                case .header:
                    top = sectionRect.minY
                case .footer:
                    top = sectionRect.maxY - newValue.height
                }
                let newFrame = CGRect(x: newValue.minX, y: top, width: newValue.width, height: newValue.height)
                super.frame = newFrame
            }
            get{
                return super.frame
            }
        }
        
        init(rectForSection: CGRect, style: Style) {
            self.rectForSection = rectForSection
            self.style = style
            super.init(frame: .zero)
        }
        
        required init?(coder aDecoder: NSCoder) {
            fatalError("init(coder:) has not been implemented")
        }
        
    }
    

    相关文章

      网友评论

        本文标题:TableView Head Footer 不停留实现方式

        本文链接:https://www.haomeiwen.com/subject/dbflbttx.html