2013-06-09 5 views
7

Ho questo problema e non riesco a trovare alcun'altra menzione di questo ovunque.L'indicatore di scorrimento si blocca quando Bouncing è disabilitato per UIScrollView

In sostanza, se disattivo rimbalzare in un UIScrollView (così derivati ​​come UITableView sono anche colpiti) è possibile ottenere l'indicatore di scorrimento bloccato se un utente scorre verso l'alto, e poi, con un altro gesto, cerca di continuare lo scorrimento usando un colpo rapido.

Una volta che questo accade, l'indicatore di scorrimento non sparirà a meno che un utente non scorre di nuovo o tocca la vista a scorrimento. Il problema più grande è che la scrollview catturerà quel tocco e quindi se provi a toccare su una cella di tabella, non accadrà nulla alla prima volta.

Ho provato questo con solo un'app di barebone sia sul mio dispositivo che sul simulatore, e sembra essere solo un problema generale con UIScrollView e disabilitare il bouncing; tuttavia, come ho detto, non riesco a trovare altre menzioni di questo su Internet.

È solo un errore? È questo comportamento previsto? Sto facendo qualcosa di sbagliato? Se questo è un bug, allora qualcuno sa di un work-around o di una correzione?

+0

Ho lo stesso problema o un problema simile in questo momento. Suppongo che abiliterò il bouncing per ora ... Come dici tu, quando si verifica questo problema, il prossimo tap sarà "inghiottito" dalla vista tabella, in modo che una cella debba essere toccata due volte per essere selezionata, ecc. – Jonny

+0

Ciao ragazzi, hai trovato una soluzione a questo comportamento? Grazie. – apascual

risposta

0

Hai aggiunto il gesto del tocco per la tua scrollview, in caso contrario prova ad aggiungerlo?

UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(resignsKeyboard)]; 
    [self.scrollView addGestureRecognizer:singleTap]; 
    singleTap.numberOfTapsRequired = 1; 
    singleTap.delegate = self; 

Add delegato UIGestureRecognizerDelegate nel file di interfaccia quindi implementare il metodo delgate rubinetto gesto

-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch 
{ 
if (self.scrollView.superview != nil) 
    { 
     if ([touch.view isKindOfClass:[UIButton class]]||[touch.view.superview.superview isKindOfClass:[UITableViewCell class]]||[touch.view.superview.superview.superview isKindOfClass:[UITableViewCell class]]||[touch.view.superview isKindOfClass:[UITableViewCell class]]) 
      // we touched our control surface 
     { 
      return NO; // ignore the touch 
     } 

    } 

    return YES; // handle the touch 
} 

// Per eseguire altre azioni su tocco di scorrimento come dimissionario tastiera, utilizzare se necessario

-(void) resignsKeyboard 
{ 
    [self.view endEditing:YES]; 
    [self.scrollView setContentOffset:CGPointMake(0,0) animated:YES]; 
}