【问题标题】:UIRefreshControl & UiTableview Content InsetUIRefreshControl & UiTableview 内容插图
【发布时间】:2016-01-09 20:29:02
【问题描述】:

UITableView 中使用UIRefresherControl 时,当table view 的content insets 为0 时一切正常,并且在您拉起时开始刷新,并且滚动视图的内容偏移量达到大约-200 .

但是,当我将 UITableView 的内容插入设置为 -176(我需要这样做)时,当我拉到 -376 时,刷新仍然没有开始。启用或禁用“调整滚动视图插图”设置不会进行任何更改。我该怎么办,我还应该以某种方式更改UIRefresherControl 的任何内容插入值吗?或者当您更改UITableView 的内容插入时它不会自动调整吗?

var refresher:UIRefreshControl!

override func viewDidLoad() {
super.viewDidLoad()

refresher = UIRefreshControl()
refresher.tintColor = UIColor.blackColor()
refresher.addTarget(self, action: "refresh", forControlEvents:    UIControlEvents.ValueChanged)
self.resultsTable.addSubview(refresher)

 }


  func refresh() {

  print("refresh table")

  refreshTable()

  }

【问题讨论】:

    标签: ios swift refresh


    【解决方案1】:

    我遇到了类似的问题。动态更改 tableview 的内容插入会与刷新控件混淆。

    根本原因是刷新控件改变了内容偏移,进而调用了scrollViewDidScroll(这是内容插入被重置的地方)

    解决方案 1。 如果您只设置一次内容插入(因此当控制器加载时),请通过情节提要进行设置。

    解决方案 2。 如果在滚动视图委托方法期间需要动态设置内容插入。试试这样的:

    func scrollViewDidScroll(scrollView: UIScrollView) {
    
        let offset = scrollView.contentOffset.y
    
        if offset >= -tableViewInsetHeight {
    
            // Change contentInset only if contentoffset is 
            // greater than the inset 
            scrollView.contentInset = UIEdgeInsetsMake(-offset, 0, 0, 0)
    
        }
    }
    

    【讨论】:

      【解决方案2】:

      如果在 UITableView 的委托的scrollViewDidEndDragging 方法上触发事件,您可以触发任何您想要的偏移量:

      func scrollViewDidEndDragging(scrollView: UIScrollView, willDecelerate decelerate: Bool) 
      {
          if scrollView.contentOffset.y <= -60
          {
              refresher.sendActionsForControlEvents(UIControlEvents.ValueChanged)
          }
      }
      

      在这种情况下,我将其设置为 60。

      【讨论】:

        猜你喜欢
        • 2013-08-11
        • 2016-01-21
        • 2012-09-22
        • 1970-01-01
        • 2013-09-25
        • 2015-07-30
        • 2013-02-03
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多