2015-01-23 12 views
5

Scarico i dati dal Web, è costituito da testo e immagini. Sto mettendo questi dati in UITableView e voglio che l'immagine sia uno sfondo di UITableViewCell. Tutte le immagini ha la stessa risoluzione 620x350.Come impostare l'altezza di UITableViewCell in base alle dimensioni dello schermo

Tutti gli iPhone hanno schermi di dimensioni diverse, quindi ho bisogno di ridimensionare la larghezza e l'altezza dell'immagine a seconda delle dimensioni dello schermo, e farlo anche a UITableViewCell.

Quali sono le migliori soluzioni?

Grazie.

+1

Perché? Il punto di uno schermo più grande è quello di essere in grado di mostrare più informazioni sullo schermo. Da quello che descrivi, perché preoccuparsi di supportare gli schermi più grandi se hai intenzione di mostrare la stessa quantità di informazioni, solo più grande? – rmaddy

+1

Non so come ridimensionare l'immagine mantenendo le stesse proporzioni. Questa è in realtà la mia domanda. – igrrik

risposta

2

Basta usare - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath;

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{ 
    CGFloat aspectRatio = 350.0f/620.0f; 
    return aspectRatio * [UIScreen mainScreen].bounds.size.width;// assuming that the image will stretch across the width of the screen 
} 
+0

Grazie per la risposta.Quindi se ti capisco, questo mi darà la nuova altezza dell'immagine a seconda delle dimensioni dello schermo, giusto? Ma non sono sicuro di dove metterlo, per impostare l'altezza della cella. – igrrik

+0

La parte difficile sono i vincoli. Questo codice non è sufficiente. Quindi, in 1 linea hai 3 errori: puntatore per un primitivo; divisione int per un galleggiante; nessuna virgola punto alla fine. –

+0

Mi dispiace, ho provato ad aiutare dal mio telefono. Queste cose accadono ... – Bennie

-1

È possibile utilizzare il metodo -tableView:heightForRowAtIndexPath: in HTTableViewDelegate per restituire l'altezza per ogni cella. Nel tuo caso, si vuole qualcosa di simile:

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { 

    return [UIScreen mainScreen].bounds.size.height; 
} 
+0

Quindi questo darà la risoluzione dello schermo giusto? E poi devo fare smh come la dichiarazione switch-case, dove ho impostato la larghezza e l'altezza della cella? – igrrik

+0

non funziona correttamente senza vincoli per l'immagine. Inoltre questo restituisce solo le celle tutte all'altezza dello schermo. –

+0

Non ha chiesto come si adatta l'immagine alla cella. Ha chiesto come impostare l'altezza della cella all'altezza dello schermo. Ridimensionare l'immagine alla dimensione della cella è la parte facile. – AdamPro13

3

la soluzione migliore e pulita, è solo a giocare con l'altezza della cella, lasciando che il l'immagine può essere ridimensionata automaticamente da Autolayout.

E 'facile:

  1. nella tua cella, aggiungere un UIImageView e impostare la dimensione che si desidera avere quando la cellula ha l'altezza effettiva;

  2. Imposta come vincoli di questo UIImageView, almeno superiore, inferiore e uno del bordo laterale (destra o sinistra); impostare anche i vincoli per mantenere la proporzione larghezza/altezza;

A questo punto, quando la cella crescere, l'immagine crescere in altezza, e per mantenere la proporzione (vincolo grazie) è ridimensionato la larghezza pure, avendo SEMPRE la corretta e dimensioni proporzionate.

Ora, dovete solo scrivere il codice per l'altezza della cella:

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{ 
    static CGFloat cellDefaultHeight = /*the default height of the cell*/; 
    static CGFloat screenDefaultHeight = /*the default height of the screen i.e. 480 in iPhone 4*/; 

    CGFloat factor = cellDefaultHeight/screenDefaultHeight 

    return factor * [UIScreen mainScreen].bounds.size.height; 
} 

Ovviamente, impostare il contentMode del UIImageView-AspectFill.

+0

Grazie, per la tua risposta sembra essere quella giusta. Ma prima di iniziare a provarlo, solo una domanda. Quali taglie dovrei usare nello storyboard per impostazione predefinita? mio storyboard è il 600x600 di serie, ho calcolato le dimensioni delle immagini per ogni schermata e ho 320x180 per schermo da 3,5/4 pollici 375x211 per 4.7 pollici 414x233 per 5.5 pollici Ovviamente la larghezza è la larghezza massima dello schermo e l'altezza viene calcolata con le proporzioni di 1,77. Quale di questi dovrei usare di default? E inoltre ho bisogno di mettere UIImageView? Perché non usare lo sfondo delle celle? – igrrik

+0

l'altezza della cella predefinita per uno schermo di 320 px di larghezza è qualcosa che puoi decidere. Come anche se metti o meno l'immagine come sfondo, ma in quel caso hai problemi di proporzioni quando lo schermo è più alto e la larghezza è la stessa (cioè iPhone 5). L'immagine verrebbe ripetuta. –

+0

Sì. Grazie. Funziona quasi, tranne un problema. Guarda gli screenshot. Nella vista master l'immagine viene tagliata e succede a tutti i dispositivi. https://www.dropbox.com/s/evuse7mqi3q7tsc/%D0%A1%D0%BD%D0%B8%D0%BC%D0%BE%D0%BA%20%D1%8D%D0%BA% D1% 80% D0% B0% D0% BD% D0% B0% 202015-01-24% 20% D0% B2% 202.58.17.png? Dl = 0 https://www.dropbox.com/s/ m0rssbq83dau4pd /% D0% A1% D0% BD% D0% B8% D0% BC% D0% BE% D0% BA% 20% D1% 8D% D0% BA% D1% 80% D0% B0% D0% BD% D0 % B0% 202015-01-24% 20% D0% B2% 202.58.38.png? Dl = 0 – igrrik

Problemi correlati