美文网首页iOS 开发 iOS Developer
Swift UI 21 利用UITableView实现瀑布流效应

Swift UI 21 利用UITableView实现瀑布流效应

作者: 前进的苏辰 | 来源:发表于2016-09-05 18:39 被阅读0次

    1:瀑布流效应一般使用UICollectionView(网格)实现
    2:利用UITableView的父类是UIScrollView也可以实现
    3:父类中的协议方法 (协议中的方法是可以继承的)
    4:在屏幕两端各设置两个tableView(宽为屏宽的一半)
    5:利用父协议中的方法func scrollViewDidScroll(scrollView: UIScrollView)
    6:控制两个tableView实现联动效果(设置contentOffset相等)

    具体代码如下:

        let width = UIScreen.mainScreen().bounds.size.width
        let height = UIScreen.mainScreen().bounds.size.height
        
        override func viewDidLoad() {
            super.viewDidLoad()
            // Do any additional setup after loading the view, typically from a nib.
            createUI()
        }
    
        func createUI(){
            let tableView1 = UITableView.init(frame: CGRectMake(0, 0, width / 2, height))
            let tableView2 = UITableView.init(frame: CGRectMake(width / 2, 0, width / 2, height))
            
            tableView1.showsVerticalScrollIndicator = false
            
            tableView1.tag = 10
            tableView2.tag = 20
            
            self.view.addSubview(tableView1)
            self.view.addSubview(tableView2)
            
            tableView1.delegate = self
            tableView1.dataSource = self
            
            tableView2.dataSource = self
            tableView2.delegate = self
        }
        
        //协议中的方法
        func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
            if tableView.tag == 10 {
                return 30
            } else {
                return 40
            }
        }
        
        func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
            
            if tableView.tag == 10 {
                var cell = tableView.dequeueReusableCellWithIdentifier("LWY")
                if cell == nil {
                    cell = UITableViewCell.init(style: .Default, reuseIdentifier: "LWY")
                }
                cell?.textLabel?.text = "\(indexPath.row)"
                return cell!
           
            } else {
                var cell = tableView.dequeueReusableCellWithIdentifier("HY")
                if cell == nil {
                    cell = UITableViewCell.init(style: .Default, reuseIdentifier: "HY")
                }
                cell?.textLabel?.text = "Hello, world"
                return cell!
            }
            
        }
        
        //设置行高(默认行高是44)
        func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
            return CGFloat(arc4random() % 61) + 40
        }
        
        
        //父类中的协议方法 (协议中的方法是可以继承的)
        func scrollViewDidScroll(scrollView: UIScrollView) {
            print(scrollView.tag)
            
            let tableView1 = self.view.viewWithTag(10) as! UITableView
            let tableView2 = self.view.viewWithTag(20) as! UITableView
            
            //如果滚动左侧视图时,则设置右侧视图的偏移量等于左侧视图的偏移量
            if scrollView == tableView1 {
                tableView2.contentOffset = tableView1.contentOffset
            } else {
                tableView1.contentOffset = tableView2.contentOffset
            }
        }
    

    相关文章

      网友评论

        本文标题:Swift UI 21 利用UITableView实现瀑布流效应

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