Swift中的无限Tableview

时间:2016-05-09 16:13:57

标签: ios swift uitableview uiscrollview uisplitviewcontroller

我在 iPhone 应用中使用 Splitview Controller ,仅使用 Potrait模式

我在MasterView.swift中尝试

override func scrollViewDidScroll(scrollView: UIScrollView) {
        let currentOffset = scrollView.contentOffset.y
        let maximumOffset = (scrollView.contentSize.height - scrollView.frame.size.height)

        if (currentOffset >= maximumOffset) { 
            print("call API")
        }
    }

问题

我的错误Tableview y内容偏移为 -64 。 即使它有导航BAR

    <UITableView: 0x7f8beb046400; frame = (0 0; 375 667); clipsToBounds = YES; 
autoresize = W+H; gestureRecognizers = <NSArray: 0x7f8bea56dd20>; 
layer = <CALayer: 0x7f8bea565730>; 
contentOffset: {0, -64}; 
contentSize: {600, 0}>

谢谢

帮我解决这个问题

3 个答案:

答案 0 :(得分:2)

  

我得错了Tableview y内容偏移量为-64。甚至很难有导航BAR

默认情况下Const xlTextWindows = 20 属性为automaticallyAdjustsScrollViewInsets,因此滚动视图中的内容(请记住YESUITableView的子类)是偏移的,因此顶部内容显示在导航栏和状态栏下方,但可以在这些栏下方向上滚动。导航栏和状态栏的正常高度为64。

如果您没有获得所需的外观,则可能需要将UIScrollView设置为automaticallyAdjustsScrollViewInsets,但我通常会发现这是错误的答案。看起来您只是使用偏移量来确定何时在其他框架中调用某个方法,因此最佳答案可能是在计算是否进行调用时将偏移量考虑在内。

答案 1 :(得分:0)

我在swift中使用下面的代码来确定我的表视图何时到达底部,我希望你发现它很有用;

    func scrollViewDidScroll(scrollView: UIScrollView) {
         if tableView.contentSize.height >= tableView.frame.size.height {
            if(tableView.contentOffset.y >= 
               (tableView.contentSize.height - tableView.frame.size.height)) {
                //user has scrolled to the bottom   
               }
               else {
               //table view is not in bottom
               }
          }
     } 

答案 2 :(得分:-2)

这是因为您的导航栏是半透明的。

选项1:您不需要半透明导航栏。

将您的UINavigationBar translucent媒体资源设置为false或取消标记故事板中Translucent的{​​{1}}复选框,将其删除。

enter image description here

选项2:您需要一个半透明的导航栏。

您需要考虑状态栏和导航栏高度。总偏移量将是状态栏高度加上导航栏高度:

UINavigationBar