2016-04-21 6 views
1

У меня есть представление, которое содержит другое представление в верхней части, которое я использую, чтобы показать некоторую базовую информацию. Он составляет около 40% от общей высоты просмотра. Ниже этого представления «header» я использую UICollectionView, который прокручивается. Теперь я добавил UIRefreshControl в свой UICollectionView, но обновление никогда не происходит, потому что пользователь не может потянуть UICollectionView так далеко. Когда я уменьшаю высоту верхнего вида, он начинает работать, потому что есть достаточно места, чтобы вытащить коллекцию.UIRefreshControl с низкой высотой UICollectionView

Вот как я добавляю в refreshControl:

self.matchDetailRefreshControl = UIRefreshControl() 
    self.matchDetailRefreshControl.addTarget(self, action: #selector(MatchDetailViewController.fetchAll), forControlEvents: .ValueChanged) 
    self.collectionView!.addSubview(self.matchDetailRefreshControl) 
    self.collectionView!.alwaysBounceVertical = true 

взглянуть на этот скриншот для справки: enter image description here

Как вы можете видеть, UIRefreshControl не получает полностью заполненном, в то время как мой палец уже находится в нижней части экрана.

Как это исправить?

+0

Попробуйте использовать этот элемент управления: https://github.com/samvermette/SVPullToRefresh надеюсь, что вы получите помощь. –

ответ

1

Вы можете реализовать scrollViewDidScroll. Если contentOffset в Scrollview является мимо определенной точки, а затем реализовать обновление программно с помощью beginRefreshing()

например (с контролем обновления, подключенного к розетке с именем «refreshControl»)

func scrollViewDidScroll(scrollView: UIScrollView) { 

    let currentOffset = scrollView.contentOffset 

    let yOffset = currentOffset.y 

    if yOffset < -30.0 && !refreshControl.refreshing { 
     refreshControl.beginRefreshing() 
    } 
} 

не забудьте чтобы назначить делегата scrollView себе, если у вас еще нет

Редактировать: sorry it is beginRefreshing(), а не startRefreshing().

+0

Как просто ... Я об этом не думал. Благодаря! – gasparuff

+1

Нет проблем! Я рад, что смогу помочь :) –

+0

Чтобы вызвать метод refresh, вы должны вызвать 'refreshControl.sendActionsForControlEvents: UIControlEventValueChanged'. – chengsam