2015-01-23 10 views
5

Ich lade Daten aus dem Internet, besteht aus Text und Bild. Ich stelle diese Daten in UITableView und ich möchte, dass Bild ein Hintergrund von UITableViewCell ist. Alle Bilder haben die gleiche Auflösung 620x350.Wie setze ich UITableViewCell Höhe abhängig von der Bildschirmgröße

Alle iPhones haben unterschiedliche Bildschirmgrößen, daher muss ich die Breite und Höhe des Bildes abhängig von der Bildschirmgröße skalieren und dies auch mit UITableViewCell tun.

Was sind die besten Lösungen?

Vielen Dank.

+1

Warum? Der Punkt auf einem größeren Bildschirm ist es, mehr Informationen auf dem Bildschirm anzeigen zu können. Von dem, was du beschreibst, warum solltest du die größeren Bildschirme unterstützen, wenn du nur die gleiche Menge an Informationen zeigst, nur größer? – rmaddy

+1

Ich weiß nicht, wie man das Bild unter Beibehaltung des gleichen Seitenverhältnisses skaliert. Das ist eigentlich meine Frage. – igrrik

Antwort

2

einfach - (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

Vielen Dank für Ihre Antwort.Also, wenn ich dich verstehe, wird mir das die neue Höhe des Bildes je nach Bildschirmgröße geben, oder? Aber ich bin mir nicht sicher, wo ich es setzen soll, um die Höhe der Zelle zu setzen. – igrrik

+0

Der schwierige Teil sind die Einschränkungen. Dieser Code ist nicht genug. Dann haben Sie in 1 Zeile 3 Fehler: Zeiger für ein Primitiv; int Division für einen Float; kein Punkt-Komma am Ende. –

+0

Es tut mir leid, dass ich versucht habe, von meinem Telefon zu helfen. Diese Dinge passieren ... – Bennie

-1

können Sie die -tableView:heightForRowAtIndexPath: Methode in HTTableViewDelegate verwenden, um die Höhe für jede Zelle zurückzukehren. In Ihrem Fall sollten Sie etwas wie folgt aus:

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

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

Also wird dies die Bildschirmauflösung richtig? Und dann muss ich smh wie switch-case statement machen, wo ich die Breite und Höhe der Zelle einstelle? – igrrik

+0

es funktioniert nicht ordnungsgemäß ohne Einschränkung für das Bild. Außerdem geben die Zellen nur alle mit der Höhe des Bildschirms zurück. –

+0

Er fragte nicht, wie man das Bild an die Zelle anpasst. Er fragte, wie man die Zellenhöhe auf die Bildschirmhöhe einstellt. Das einfache Anpassen des Bildes an die Zellengröße ist einfach. – AdamPro13

3

Die beste und saubere Lösung verwenden, ist es nur mit der Höhe der Zelle spielen, lassen die Bild wird automatisch von Autolayout angepasst.

Es ist einfach:

  1. in Ihrer Zelle, ein UIImageView hinzuzufügen und die Größe, die Sie haben wollen, auf, wenn die Zelle die tatsächliche Höhe hat;

  2. Set als Einschränkungen dieser UIImageView mindestens oben, unten und einer der seitlichen Rand (rechts oder links); Stellen Sie auch die Einschränkungen ein, um die Proportion Breite/Höhe zu halten;

An diesem Punkt, wenn die Zelle wachsen, wächst das Bild in der Höhe, und den Anteil (dank constraint) zu halten, es ist, die Breite als auch die Größe verändert, ALWAYS die korrekten aufweisen und proportionierte Größe.

Und nun müssen Sie nur noch den Code für die Höhe der Zelle schreiben:

- (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; 
} 

Offensichtlich die contentMode des UIImageView-AspectFill gesetzt.

+0

Danke, für Ihre Antwort scheint es die richtige zu sein. Aber bevor ich anfange es zu versuchen, nur eine Frage. Welche Größen sollte ich standardmäßig im Storyboard verwenden? Mein Storyboard der Standard 600x600 ist, dass ich die Größe des Bildes berechnet für jeden Bildschirm und ich habe 320x180 3,5/4-Zoll-Bildschirm 375x211 für 4,7-Zoll- 414x233 5,5 Zoll Offensichtlich ist die Breite die maximale Breite des Bildschirms und die Höhe wird mit dem Seitenverhältnis von 1,77 berechnet. Welche von diesen sollte ich standardmäßig verwenden? Und muss ich auch UIImageView setzen? Warum nicht den Hintergrund der Zelle verwenden? – igrrik

+0

die Höhe der Standardzelle für einen Bildschirm von 320px Breite ist etwas, das Sie entscheiden können. Wie auch wenn Sie das Bild als Hintergrund verwenden oder nicht, aber in diesem Fall haben Sie Probleme mit der Proportion, wenn der Bildschirm höher ist und die Breite gleich ist (zB iPhone 5). Das Bild würde wiederholt werden. –

+0

Ja. Vielen Dank. Es funktioniert fast, bis auf ein Problem. Schau dir die Screenshots an. In der Master-Ansicht wird das Bild abgeschnitten, und es passiert alle Geräte. 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

Verwandte Themen