2015-01-25 18 views
14

Ho creato un UIScrollView nei miei storyboard e ho aggiunto 12 UIButtons in un contenitore Visualizza che si trova all'interno di UIScrollView.UIButtons nella parte inferiore di UIScrollView non funzionante

quando si esegue il simulatore di iPhone 5s, 9 dei pulsanti possono essere visualizzati sullo schermo, il resto dei pulsanti può essere visto solo quando si scorre verso il basso.

i 9 pulsanti che possono essere visti inizialmente sullo schermo possono essere interagiti con. Tuttavia, non è possibile interagire con i 3 pulsanti nella parte inferiore della vista di scorrimento (che devono essere fatti scorrere per essere visti).

Ho eseguito l'app su un simulatore iPhone 6 che visualizza tutti i 12 pulsanti sullo schermo senza dover scorrere e i 3 pulsanti in basso funzionano.

Sto utilizzando l'autolayout.

Ho provato a giocherellare con il contentSize di UIScrollView e non aiuta.

+0

Mostra del codice in cui si sta aggiungendo i pulsanti. – Rashad

+0

Il frame 'UIScrollView' (o la vista del contenitore) potrebbe non essere quello che ci si aspetta. Assicurati che sia impostato per ritagliare le visualizzazioni secondarie ed eseguire di nuovo. – Stavash

+0

@Rashad Ho aggiunto i pulsanti tramite lo storyboard –

risposta

25

Sembra che sia necessario aumentare l'altezza del riquadro della vista del contenitore. Lo contentSize di scrollView influisce solo su come scorrerà, il che è irrilevante qui.

Se il pulsante si trova all'esterno della vista contenitore, verrà comunque visualizzato. Tuttavia, non può rispondere a nessun evento di tocco.

+0

che ha funzionato! grazie, non avevo idea che l'altezza della vista del contenitore e il contentSize della scrollView fossero 2 cose diverse –

+0

@WesleyOw Prego. Potresti essere così gentile da sospendere e accettare questa risposta? – skyline75489

+0

verrebbe un upvote ma non ho abbastanza rep :( –

2

per me è stato tutto solo per Deselezionare la casella di controlloRegola di scorrimento Visualizza Inserti nello storyboard di quel ViewController.

enter image description here

PS: Le risposte di cui sopra non hanno lavorato per me.

2

quando si utilizza scrollview nello storyboard con autolayout. di solito viene impostato utilizzando una vista del contenuto all'interno dello scrollview che conterrà tutte le altre viste (ad esempio pulsanti, etichette, ecc.) la vista del contenuto di solito è impostata per avere uguale altezza e larghezza uguale.

per ampliare la visualizzazione del contenuto è l'altezza, è necessario aggiungere un vincolo di altezza quindi assegnarlo a una presa in modo da poter facilmente manipolare il suo valore con nel codice. quindi impostare la priorità del vincolo di altezza della vista del contenuto su 1000 ("richiesto") e impostare la priorità del vincolo "uguale larghezza per: visualizzare" della vista del contenuto su 750 (alto).

0

Aggiungere tutte le visualizzazioni secondarie dal contenitore a ScrollView. E nascondi il contenitore. Assicurarsi che il contenitore (ContainerView di scrollView) debba essere anche una subView di scrollView.

0

Un'altra opzione è ridurre la priorità nel vincolo Vista contenuto.

In Xcode 9, ho disposto il contentView come necessario e il pulsante esteso sotto la vista sull'iPhone 5. Ho ridimensionato dinamicamente scrollView.contentSize.height e contentView.frame nel controller di visualizzazione. La scrollView scorreva per me ma non ero ancora in grado di selezionare il pulsante e vedevo gli avvertimenti nello Storyboard.

Dopo aver abbassato la priorità sul vincolo di allineamento del centro Y per ContentView, gli avvisi in Storyboard sono scomparsi e sono stato in grado di scorrere fino alla fine della scrollView e selezionare il pulsante sul simulatore iPhone 5.

enter image description here

NOTA: sto ancora controllando le dimensioni del dispositivo e il ridimensionamento del valore scrollView.contentSize.height in viewWillLayoutSubviews() per dispositivi di piccole dimensioni.

override func viewWillLayoutSubviews() { 
     super.viewWillLayoutSubviews() 
     scrollView.contentSize.height = (UIDevice.current.isSmallDevice) ? 560 : contentView.frame.size.height 
    } 

(UIDevice.current.isSmallDevice è una chiamata a un interno di UIDevice che restituisce un bool determinato dalla dimensione dello schermo)

Problemi correlati