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];
}
È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top