zoukankan      html  css  js  c++  java
  • 关于TableVIew的上下滚动如何探测其边界

    UITableView is a subclass of UIScrollView, and UITableViewDelegate conforms to UIScrollViewDelegate. So the delegate you attach to the table view will get events such as scrollViewDidScroll:, and you can call methods such as contentOffset on the table view to find the scroll position.

    -(void)scrollViewDidScroll:(UIScrollView *)scrollView
    {   
        CGFloat height = scrollView.frame.size.height;
    
        CGFloat contentYoffset = scrollView.contentOffset.y;
    
        CGFloat distanceFromBottom = scrollView.contentSize.height - contentYoffset;
    
        if(distanceFromBottom < height) 
        {
            NSLog(@"end of the table");
        }
    }
    - (void)scrollViewDidScroll:(UIScrollView *)aScrollView {
        CGPoint offset = aScrollView.contentOffset;
        CGRect bounds = aScrollView.bounds;
        CGSize size = aScrollView.contentSize;
        UIEdgeInsets inset = aScrollView.contentInset;
        float y = offset.y + bounds.size.height - inset.bottom;
        float h = size.height;
        // NSLog(@"offset: %f", offset.y);   
        // NSLog(@"content.height: %f", size.height);   
        // NSLog(@"bounds.height: %f", bounds.size.height);   
        // NSLog(@"inset.top: %f", inset.top);   
        // NSLog(@"inset.bottom: %f", inset.bottom);   
        // NSLog(@"pos: %f of %f", y, h);
    
        float reload_distance = 10;
        if(y > h + reload_distance) {
            NSLog(@"load more rows");
        }
    }

    上述代码可以添加到tableViewDelegate的类当中~

    下面是我自己实现的代码,这样按钮滚动不过超过tableview的范围了

    -(void)scrollViewDidScroll:(UIScrollView *)scrollView{
        CGFloat height = scrollView.frame.size.height;
        
        CGFloat contentYoffset = scrollView.contentOffset.y;
        
        CGFloat distanceFromBottom = scrollView.contentSize.height - contentYoffset;
        
        if(distanceFromBottom < height)
        {
    //        NSLog(@"end of the table");
            CGFloat realOffsetY = scrollView.contentSize.height - height;
            [scrollView setContentOffset:CGPointMake(0, realOffsetY)];
    
        }else if(contentYoffset < 0){
    //        NSLog(@"out of the table head");
    //        scrollView.scrollsToTop = YES;
            [scrollView setContentOffset:CGPointMake(0, 0)];
        }
    }
    
    #pragma mark - button action
    - (IBAction)upperButtonClick:(id)sender {
        NSLog(@"Upper Button was Clicked");
        CGPoint contentOffset = self.tableView.contentOffset;
        contentOffset.y -= OFFSET_VALUE; // Adjust this value as you need
        [self.tableView setContentOffset:contentOffset animated:YES];
    }
    
    - (IBAction)downButtonClick:(id)sender {
        NSLog(@"Down Button was Clicked");
        CGPoint contentOffset = self.tableView.contentOffset;
        contentOffset.y += OFFSET_VALUE; // Adjust this value as you need
        [self.tableView setContentOffset:contentOffset animated:YES];
    }
  • 相关阅读:
    笔记本越用越慢的解决方法。
    ubuntu 16.04 的IP地址变更
    如何把路由器当作交换机来使用
    通过 rufus 创建启动U盘,安装 VMWare Esxi
    Enable SMB2 on the Client
    Shiro入门学习与实战(一)
    Linux下Nginx1.9.9的安装
    Activiti工作流学习之SpringBoot整合Activiti5.22.0实现在线设计器(二)
    Activiti工作流学习之概述(一)
    Sqoop的安装及常用命令
  • 原文地址:https://www.cnblogs.com/scaptain/p/4023957.html
Copyright © 2011-2022 走看看