Gli UIButtons nella parte inferiore di UIScrollView non ricevono tocchi
Domanda
Sto scrivendo un'app per iPhone con una barra delle schede e una barra di navigazione. A un certo punto, sto spingendo un'istanza della mia classe DetailsViewController sullo stack del controller di navigazione per mostrarlo.
Questo controller crea la sua gerarchia di visualizzazioni nel codice: la proprietà view
del controller è impostata su UIScrollView, che contiene una semplice UIView (chiamiamola " contentView ") dimensionata per contenere tutto il contenuto essere mostrato. Nella parte inferiore di questo contentView, ho quattro UIButtons.
Ora quando eseguo l'app (al momento nel simulatore) e scorro fino alla fine della vista, i primi due pulsanti rispondono ai tocchi; il terzo risponde ai tocchi solo nella parte superiore di esso e il pulsante inferiore non risponde affatto ai tocchi. Facendo clic in varie parti del terzo pulsante, sembra che i 93 pixel inferiori della vista di scorrimento non passino gli eventi di tocco alle sue visualizzazioni secondarie.
93 è sospetto: è anche l'altezza combinata della barra delle schede (49 pixel) e della barra di navigazione (44 pixel). Tuttavia, la barra di navigazione e la barra delle schede si trovano all'esterno della vista di scorrimento. Qualche suggerimento sul perché ciò potrebbe accadere?
Ecco il codice in questione:
- (void)loadView
{
CGRect frame = [[UIScreen mainScreen] applicationFrame];
UIScrollView *scrollView = [[UIScrollView alloc] initWithFrame:frame];
scrollView.autoresizingMask = (UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight);
scrollView.delegate = self;
self.view = scrollView;
UIView *contentView = [[UIView alloc] initWithFrame:scrollView.bounds];
contentView.autoresizingMask = (UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight);
[scrollView addSubview:contentView];
CGSize viewSize = contentView.bounds.size;
CGSize size;
CGFloat y = 0;
/* Snip creating various labels and image views */
/* Actions view creates and lays out the four buttons; its sizeThatFits:
** method returns the frame size to contain the buttons */
actionsView = [[PropertyDetailActionsView alloc] initWithFrame:CGRectZero];
actionsView.autoresizingMask = (UIViewAutoresizingFlexibleBottomMargin | UIViewAutoresizingFlexibleWidth);
actionsView.delegate = self;
size = [actionsView sizeThatFits:viewSize];
actionsView.frame = CGRectMake(0, y, size.width, size.height);
[contentView addSubview:actionsView];
y += size.height;
[contentView setFrame:CGRectMake(0, 0, viewSize.width, y)];
scrollView.contentSize = contentView.frame.size;
[contentView release];
[scrollView release];
}
Soluzione
Come ho suggerito ieri su Twitter, potrebbe avere qualcosa a che fare con il margine inferiore flessibile impostato su actionsView.
Quel suggerimento non ha risolto il problema, ma ha portato nella giusta direzione. Rimuovendo l'altezza flessibile di contentView, il problema è stato risolto.
Quindi, se qualcuno là fuori ha problemi simili, prova a giocare con i tuoi autoresizingMasks.