2015-05-26 15 views
7

Ho deciso di utilizzare UIScrollView invece di UITableView nella mia app per molte ragioni. Quando usavo UITableView, ero in grado di aggiungere un UIRefreshControl senza alcun problema. Tuttavia, quando utilizzo lo stesso codice sul mio UIScrollView, non succede nulla. Ho provato diverse librerie di aggiornamento di terze parti e nessuna sembra funzionare. Qualsiasi aiuto è apprezzato.UIRefreshControl aggiunto a UIScrollView non viene mai mostrato

Fonte:

var scroll: UIScrollView! 
var refreshControl: UIRefreshControl! 

override func viewDidLoad() 
{ 
    super.viewDidLoad() 

    self.scroll = UIScrollView(frame: self.view.frame) 
    self.scroll.contentSize = CGSize(width: self.view.bounds.width, height: 10) 

    self.refreshControl = UIRefreshControl() 
    self.refreshControl.attributedTitle = NSAttributedString(string: "Pull to refresh") 
    //self.refreshControl.addTarget(self, action: "loadPostsIntoCards", forControlEvents: UIControlEvents.ValueChanged) 
    self.scroll.addSubview(self.refreshControl) 

    self.view.addSubview(self.scroll) 

    //self.loadPostsIntoCards() 
} 

Il metodo loadPostsIntoCards fa la mia chiamata API, e crea UIViews ("carte") che vengono aggiunti al UIScrollView. Quindi cambio il contentSize di UIScrollView in base all'altezza totale di tutte le carte. Le carte vengono aggiunte perfettamente e la vista di scorrimento funziona come previsto, tranne per quanto riguarda UIRefreshControl.

Grazie in anticipo per qualsiasi aiuto!

risposta

12

EDIT:
Dopo un po 'scherzare ho trovato un'altra soluzione che permetterà al ScrollView per scorrere (e innescare il controllo refresh) anche quando il contentSize è più piccola rispetto all'altezza ScrollView. Basta impostare la proprietà alwaysBounceVertical true:

self.scroll.alwaysBounceVertical = true 

RISPOSTA VECCHIO:
La dimensione contenuto dovrebbe essere più grande altezza del ScrollView al fine di fare questo lavoro. Modificare questa linea:

self.scroll.contentSize = CGSize(width: self.view.bounds.width, height: 10) 

A:.

self.scroll.contentSize = CGSize(width: self.view.bounds.width, height: self.view.bounds.height+1) 

che permetterebbe il tuo RefreshControl a calciare in

Oppure, nel tuo caso probabilmente si dovrebbe calcolare l'altezza delle tue carte e quindi impostare che come l'altezza per il tuo contentSize.

+0

Impostazione sempreBounceVertical non sembra funzionare per me:/ –

+1

Ho appena copiato il codice, aggiunto sempreBounceVertical e funziona ..:/ – donnywals

+0

hai una barra di navigazione? Penso che possa essere ciò che sta causando i miei problemi. –