• 关于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];
    }
  • 相关阅读:
    ORACLE 利用 REPLACE函数替换字段字符串
    EXCEL中对1个单元格中多个数字求和
    Oracle插入日期格式出现 ORA-01843: not a valid month的解决办法
    深入浅出设计模式——装饰模式(Decorator Pattern)
    深入浅出设计模式——组合模式(Composite Pattern)
    深入浅出设计模式——桥接模式(Bridge Pattern)
    深入浅出设计模式——适配器模式(Adapter Pattern)
    深入浅出设计模式——单例模式(Singleton Pattern)
    深入浅出设计模式——原型模式(Prototype Pattern)
    深入浅出设计模式——建造者模式(Builder Pattern)
  • 原文地址:https://www.cnblogs.com/scaptain/p/4023957.html
Copyright © 2020-2023  润新知