Wie entwickle oder migriere ich Apps für die iPhone 5-Bildschirmauflösung?

495

Das neue iPhone 5 Display verfügt über ein neues Seitenverhältnis und eine neue Auflösung (640 x 1136 Pixel).

Was ist erforderlich, um neue Anwendungen zu entwickeln oder bereits vorhandene Anwendungen auf die neue Bildschirmgröße umzustellen?

Was sollten wir beachten, um Anwendungen sowohl für ältere Displays als auch für das neue Breitbild-Seitenverhältnis "universell" zu gestalten?

Lukasz
quelle

Antworten:

481
  1. Laden Sie die neueste Version von Xcode herunter und installieren Sie sie .
  2. Legen Sie eine Startbildschirmdatei für Ihre App fest (auf der Registerkarte "Allgemein" Ihrer Zieleinstellungen). Auf diese Weise können Sie die volle Größe eines jeden Bildschirms nutzen, einschließlich der geteilten iPad-Ansichtsgrößen in iOS 9.
  3. Testen Sie Ihre App und tun Sie hoffentlich nichts anderes, da alles auf magische Weise funktionieren sollte, wenn Sie die Masken für die automatische Größenänderung richtig eingestellt oder das automatische Layout verwendet haben.
  4. Wenn Sie dies nicht getan haben, passen Sie Ihre Ansichtslayouts an, vorzugsweise mit dem automatischen Layout.
  5. Wenn Sie etwas speziell für die größeren Bildschirme tun müssen, müssen Sie [[UIScreen mainScreen] bounds]anscheinend die Höhe überprüfen, da es dafür anscheinend keine spezifische API gibt. Ab iOS 8 gibt es auch Größenklassen, die Bildschirmgrößen vertikal und horizontal in reguläre oder kompakte abstrahieren. Es wird empfohlen, die Benutzeroberfläche anzupassen.
Filip Radelic
quelle
1
Vielleicht ist es eine Shoot-the-Messenger-Sache. Neue Auflösung UND Seitenverhältnis? Neue Autorotation? Nein! Eigentlich könnte mehr Autorotationskontrolle nett sein.
Rhythmic Fistman
89
Es ist erwähnenswert, dass [UIImage imageNamed: @ "background.png"] weiterhin nur entweder "background.png" oder "[email protected]" lädt, nicht "[email protected]", falls vorhanden .
Am
1
Reicht das Hinzufügen von "[email protected]" aus oder gibt es zusätzliche Optionen in den Build-Einstellungen, die wir anpassen können / sollten?
Lukasz
3
@ Lukasas es ist genug (und einzige Möglichkeit), 1136 px Höhe zu unterstützen. Ob sich Ihre App richtig dehnt, hängt davon ab, wie Sie Ihre Ansichten einrichten. Selbst wenn Sie alles fest codiert haben, sollte das Einrichten von Masken für die automatische Größenanpassung oder des automatischen Layouts nicht viel Arbeit bedeuten.
Filip Radelic
1
@FilipRadelic - Die Auflösung, die Sie angegeben haben, dh 1136 * 960, ist es 1136 * 640 .. ?? ..
NiKKi
117

Wenn Sie eine App für das iPhone 4S oder früher erstellt haben, wird sie auf dem iPhone 5 mit Letterbox ausgeführt.

Um Ihre App an den neuen größeren Bildschirm anzupassen, ändern Sie zunächst das Startbild in: [email protected]. Seine Größe sollte 1136x640 (HxB) betragen. Ja, das Standardbild in der neuen Bildschirmgröße ist der Schlüssel, damit Ihre App den gesamten Bildschirm des neuen iPhone 5 einnimmt .

(Beachten Sie, dass die Namenskonvention nur für das Standardbild funktioniert. Wenn Sie ein anderes Bild "[email protected]" benennen, wird es nicht anstelle von "[email protected]" geladen. Wenn Sie andere Bilder laden müssen Für verschiedene Bildschirmgrößen müssen Sie dies programmgesteuert tun.)

Wenn Sie sehr, sehr viel Glück haben, könnte es das sein ... aber aller Wahrscheinlichkeit nach müssen Sie noch ein paar Schritte unternehmen.

  • Stellen Sie sicher, dass Ihre Xibs / Views das automatische Layout verwenden, um die Größe selbst zu ändern.
  • Verwenden Sie Federn und Streben, um die Größe der Ansichten zu ändern.
  • Wenn dies für Ihre App nicht ausreicht, entwerfen Sie Ihr xib / Storyboard für eine bestimmte Bildschirmgröße und positionieren Sie es programmgesteuert für die andere neu.

Entwerfen Sie im Extremfall (wenn keiner der oben genannten Punkte ausreicht) die beiden Xibs und laden Sie die entsprechende in den View Controller.

So erkennen Sie die Bildschirmgröße:

if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)
{
    CGSize result = [[UIScreen mainScreen] bounds].size;
    if(result.height == 480)
    {
        // iPhone Classic
    }
    if(result.height == 568)
    {
        // iPhone 5
    }
}
Sanjay Chaudhry
quelle
Hallo Sanjay, da wir herausfinden müssen, ob es sich um ein iPhone 5 oder früher handelt, müssen wir die Größe entsprechend anpassen. Wie ich bereits sagte, ich habe eine Tabellenansicht mit der Höhe 367 mit Navigationsleiste und Registerkartenleiste. Ich muss die Größe für das iPhone 5
Raheel
2
Was ist mit iPod touch? Was ist mit der nächsten iPhone-Generation? Man sollte sich auf Bildschirmgrößen beziehen, 3,5 Zoll / 4 Zoll, nicht iPhone / iPhone5
Valexa
2
Ein weiterer Punkt, auf den Sie achten sollten, ist, dass viewDidLoad aufgerufen wird, bevor die Größe Ihrer xib geändert wird. Wenn Sie also Berechnungen basierend auf Dingen in der Feder durchführen, müssen Sie sich darüber im Klaren sein, wie sich die Position verschieben kann (oder diese Berechnungen in viewWillAppear durchführen).
Kendall Helmstetter Gelner
30

Das einzig wirklich Notwendige ist, den App-Ressourcen ein Start-Image mit dem Namen "[email protected]" hinzuzufügen. Im Allgemeinen funktioniert die App (wenn Sie Glück haben) ordnungsgemäß.

Wenn die App keine Berührungsereignisse verarbeitet, stellen Sie sicher, dass das Tastenfenster die richtige Größe hat. Die Problemumgehung besteht darin, den richtigen Rahmen festzulegen:

[window setFrame:[[UIScreen mainScreen] bounds]]

Es gibt andere Probleme, die nicht mit der Bildschirmgröße bei der Migration auf iOS 6 zusammenhängen. Weitere Informationen finden Sie in den Versionshinweisen zu iOS 6.0 .

onegray
quelle
22

Manchmal (für Pre-Storyboard-Apps), wenn das Layout ausreichend unterschiedlich sein soll, lohnt es sich, im viewController je nach Gerät eine andere xib anzugeben (siehe diese Frage - Sie müssen den Code für das iPhone 5 ändern) init, da kein Twiddling mit Masken zur automatischen Größenänderung funktioniert, wenn Sie andere Grafiken benötigen.

-(id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil

    NSString *myNibName;
    if ([MyDeviceInfoUtility isiPhone5]) myNibName = @"MyNibIP5";
    else myNibName = @"MyNib";

    if ((self = [super initWithNibName:myNibName bundle:nibBundleOrNil])) {


...

Dies ist nützlich für Apps, die auf ältere iOS-Versionen abzielen.

SomaMan
quelle
+1 Etwas, über das man müde sein sollte, ist die zukünftige Kompatibilität. Derzeit ist dieser Code nicht sicher, da er nur das iPhone 5-Gerät berücksichtigt. Eine Überprüfung der Bildschirmgröße wäre eine sicherere Alternative.
Stunner
Richtig - dies könnte Teil des Dienstprogramms sein, das den Gerätetyp zurückgibt - es war nur ein Beispiel, um zu zeigen, wie verschiedene Schreibfedern verwendet werden, und nicht wirklich, um das Gerät zu erhalten.
SomaMan
20

Hier finden Sie ein schönes Tutorial (für MonoTouch, aber Sie können die Informationen auch für Nicht-MonoTouch-Projekte verwenden):
http://redth.info/get-your-monotouch-apps-ready-for-iphone-5 -ios-6-heute /

  1. Erstellen Sie ein neues Bild für Ihren Begrüßungs- / Standardbildschirm ( 640 x 1136 Pixel ) mit dem Namen " [email protected] ".

  2. Gehen Sie im iOS-Simulator zum Menü Hardware -> Gerät und wählen Sie " iPhone (Retina 4-Zoll) ".

  3. Erstellen Sie andere Bilder, z. B. Hintergrundbilder

  4. Erkennen Sie das iPhone 5, um Ihre neuen Bilder zu laden:

public static bool IsTall
{
    get {
        return UIDevice.currentDevice.userInterfaceIdiom
                    == UIUserInterfaceIdiomPhone
                && UIScreen.mainScreen.bounds.size.height
                    * UIScreen.mainScreen.scale >= 1136;
    }
}

private static string tallMagic = "-568h@2x";
public static UIImage FromBundle16x9(string path)
{
    //adopt the -568h@2x naming convention
    if(IsTall())
    {
        var imagePath = Path.GetDirectoryName(path.ToString());
        var imageFile = Path.GetFileNameWithoutExtension(path.ToString());
        var imageExt = Path.GetExtension(path.ToString());
        imageFile = imageFile + tallMagic + imageExt;
        return UIImage.FromFile(Path.Combine(imagePath,imageFile));
    }
    else
    {
        return UIImage.FromBundle(path.ToString());
    }
}
Manni
quelle
13

Es ist einfach, iPhone5 und iPhone4 über XIBs zu migrieren .........

UIViewController *viewController3;
if ([[UIScreen mainScreen] bounds].size.height == 568)
{
    UIViewController *viewController3 = [[[mainscreenview alloc] initWithNibName:@"iphone5screen" bundle:nil] autorelease];               
}    
else
{
     UIViewController *viewController3 = [[[mainscreenview alloc] initWithNibName:@"iphone4screen" bundle:nil] autorelease];
}
Shankar
quelle
12

Ich löse dieses Problem hier . Fügen Sie einfach ~ 568h @ 2x Suffix zu Bildern und ~ 568h zu xibs hinzu. Es sind keine weiteren Laufzeitprüfungen oder Codeänderungen erforderlich.

Shimanski Artem
quelle
Fügen Sie diese Klassen einfach in das Projekt ein. Sie müssen keinen zusätzlichen Code schreiben. Sie haben beispielsweise eine XIB-Datei mit Hintergrundbildern mit einer Auflösung von 320 x 480, 640 x 960, 640 x 1136 (iPhone 3, iPhone 4, iPhone 5). Stellen Sie einfach die richtige Maske für die automatische Größenänderung ein und benennen Sie die Bilder image.png, [email protected], [email protected].
Shimanski Artem
@ ShimanskiArtem Aber ich stelle fest, dass einige Komponenten an andere Positionen laufen! Haben Sie eine Idee ????
Adel
Überprüfen Sie Ihre Autoresizing-Masken. Ich sehe keinen anderen Grund.
Shimanski Artem
10

Ich hatte das neue Standard-Startbild hinzugefügt und (beim Auschecken mehrerer anderer SE-Antworten ...) sichergestellt, dass meine Storyboards alle automatisch die Größe und die Unteransichten haben, aber die Netzhaut 4 Zoll noch mit einem Briefkasten versehen ist.

Dann bemerkte ich, dass auf meiner Info-Liste eine Werbebuchung für " Bild starten " auf " Default.png " gesetzt war, die ich auf diese Weise entfernte und auf magische Weise kein Briefkasten mehr erschien. Hoffentlich erspart das jemand anderem die gleiche Verrücktheit, die ich ertragen habe.

SkeletonJelly
quelle
9

Ich denke, es wird nicht in allen Fällen funktionieren, aber in meinem speziellen Projekt hat es mich daran gehindert, NIB-Dateien zu duplizieren:

Irgendwo in können common.hSie diese Definitionen basierend auf der Bildschirmhöhe vornehmen:

#define HEIGHT_IPHONE_5 568
#define IS_IPHONE   ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone)
#define IS_IPHONE_5 ([[UIScreen mainScreen] bounds ].size.height == HEIGHT_IPHONE_5)

In Ihrem Basis-Controller:

- (void)viewDidLoad
{
    [super viewDidLoad];
    if (IS_IPHONE_5) {
        CGRect r = self.view.frame;
        r.size.height = HEIGHT_IPHONE_5 - 20;
        self.view.frame = r;
    }
    // now the view is stretched properly and not pushed to the bottom
    // it is pushed to the top instead...

    // other code goes here...
}
iutinvg
quelle
9

In einer constants.hDatei können Sie folgende definierte Anweisungen hinzufügen:

 #define IS_IPAD UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad 
 #define IS_IPHONE UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone
 #define IS_WIDESCREEN (fabs((double)[[UIScreen mainScreen] bounds].size.height - (double)568) < DBL_EPSILON) 
 #define IS_IPHONE_5 (!IS_IPAD && IS_WIDESCREEN)
Bob
quelle
9

Um festzustellen, ob Ihre App das iPhone 5 Retina unterstützt, verwenden Sie Folgendes: (Dies kann robuster sein, um den Anzeigetyp, 4S Retina usw. zurückzugeben. Wie unten beschrieben, wird es jedoch nur zurückgegeben, wenn das iPhone iOS5 Retina als unterstützt Ja oder Nein)

Fügen Sie in einer allgemeinen ".h" -Datei Folgendes hinzu:

BOOL IS_IPHONE5_RETINA(void);

Fügen Sie in einer allgemeinen ".m" -Datei Folgendes hinzu:

BOOL IS_IPHONE5_RETINA(void) {
    BOOL isiPhone5Retina = NO;
    if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) {
        if ([UIScreen mainScreen].scale == 2.0f) {
            CGSize result = [[UIScreen mainScreen] bounds].size;
            CGFloat scale = [UIScreen mainScreen].scale;
            result = CGSizeMake(result.width * scale, result.height * scale);

            if(result.height == 960){
                //NSLog(@"iPhone 4, 4s Retina Resolution");
            }
            if(result.height == 1136){
                //NSLog(@"iPhone 5 Resolution");
                isiPhone5Retina = YES;
            }
        } else {
            //NSLog(@"iPhone Standard Resolution");
        }
    }
    return isiPhone5Retina;
}
Mike
quelle
8

Erstellen Sie zunächst zwei xibs und hängen Sie alle Delegaten, die Hauptklasse, an die an, xibund dann können Sie diese unten in Ihrer appdelegate.mDatei angegebene Bedingung in setzen

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 

    if ([[UIScreen mainScreen] bounds].size.height == 568)
        {

        self.ViewController = [[ViewController alloc] initWithNibName:@"ViewControlleriphone5" bundle:nil];
        }

        else
        {
             self.ViewController = [[ViewController alloc] initWithNibName:@"ViewControlleriphone4" bundle:nil];

        }

Sie können es überall im Programm verwenden, abhängig von Ihren Anforderungen, auch in Ihren ViewControllerKlassen. Am wichtigsten ist, dass Sie zwei xibseparate Dateien für erstellt habeniphone 4(320*480) and iphone 5(320*568)

mandeep
quelle
7

Versuchen Sie die folgende Methode in einer Singleton-Klasse:

-(NSString *)typeOfDevice
    {
        if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)
        {
            CGSize result = [[UIScreen mainScreen] bounds].size;
            if(result.height == 480)
            {
                return @"Iphone";
            }
            if(result.height == 568)
            {
                return @"Iphone 5";
            }
        }
        else{
            return @"Ipad";;
        }


        return @"Iphone";
    }
Mohammed Ebrahim
quelle
7

Sie können die Auto LayoutFunktion verwenden und das Design mit der Bildschirmauflösung des iPhone 5 erstellen. Es funktioniert sowohl für 4 "- als auch für 3,5" -Geräte. In diesem Fall sollten Sie jedoch über ausreichende Kenntnisse des Layout-Managers verfügen.

DeveshM
quelle
Dies funktioniert jedoch nicht für Geräte, die iOS 6 nicht unterstützen.
Jonypz
7

Die Überprüfung boundsmit 568schlägt im Querformat fehl. Das iPhone 5 wird nur im Hochformat gestartet. Wenn Sie jedoch Rotationen unterstützen möchten, muss das iPhone 5 "check" auch dieses Szenario behandeln.

Hier ist ein Makro, das den Orientierungsstatus behandelt:

#define IS_IPHONE_5 (CGSizeEqualToSize([[UIScreen mainScreen] preferredMode].size, CGSizeMake(640, 1136)))

Die Verwendung des Aufrufs "PreferredMode" stammt aus einem anderen Beitrag, den ich vor einigen Stunden gelesen habe, sodass ich nicht auf diese Idee gekommen bin.

Christopher
quelle
6

Zeigen Sie zuerst dieses Bild. In diesem Bild wird eine Warnung für die Retina 4-Unterstützung angezeigt. Klicken Sie also auf diese Warnung und dann auf Hinzufügen, damit Ihr Retina 4-Begrüßungsbildschirm automatisch zu Ihrem Projekt hinzugefügt wird.

Bild hier anzeigen

und nachdem Sie diesen Code verwendet haben:

if([[UIScreen mainScreen] bounds].size.height == 568)
    {
        // For iphone 5
    }
    else
    {
        // For iphone 4 or less
    }
Darshan Kunjadiya
quelle
6

Ich hatte noch nie ein solches Problem mit einem Gerät, da ich eine Codebasis für alle hatte, ohne fest codierte Werte. Was ich tue, ist, das Bild mit der maximalen Größe als Ressource anstelle eines für jedes Gerät zu haben. Zum Beispiel würde ich eine für die Netzhautanzeige haben und sie als Aspektanpassung anzeigen, damit sie wie auf jedem Gerät angezeigt wird. Zum Beispiel zur Laufzeit den Schaltflächenrahmen festlegen. Hierfür verwende ich den% -Wert der Patentansicht. Wenn ich möchte, dass die Breite die Hälfte der übergeordneten Ansicht beträgt, nehmen Sie 50% der übergeordneten Ansicht und das Gleiche gilt für Höhe und Mitte.

Damit brauche ich nicht einmal die Xibs.

Endlosschleife
quelle
5

Mit dieser Definition können Sie berechnen, ob Sie das iPhone 5 basierend auf der Bildschirmgröße verwenden:

#define IS_IPHONE_5 ( fabs( ( double )[ [ UIScreen mainScreen ] bounds ].size.height - ( double )568 ) < DBL_EPSILON )

Verwenden Sie dann eine einfache ifAnweisung:

    if (IS_IPHONE_5) {

    // What ever changes
    }
Mutawe
quelle
4

Peter, du solltest dir Canappi wirklich ansehen, es erledigt alles für dich, alles was du tun musst, ist das Layout als solches anzugeben:

button mySubmitButton 'Sumbit' (100,100,100,30 + 0,88,0,0) { ... }

Von dort generiert Canappi den richtigen Objective-C-Code, der das Gerät erkennt, auf dem die App ausgeführt wird, und verwendet:

(100,100,100,30) for iPhone4
(100,**188**,100,30) for iPhone 5

Canappi funktioniert wie Interface Builder und Story Board zusammen, nur dass es in Textform vorliegt. Wenn Sie bereits über XIB-Dateien verfügen, können Sie diese konvertieren, sodass Sie nicht die gesamte Benutzeroberfläche von Grund auf neu erstellen müssen.

Metaprogrammer
quelle
Vielen Dank Meta, ich werde mir das ansehen, aber ich bin ein sehr neuer Programmierer und würde wirklich gerne lernen, wie man damit in sauberem Objective-C umgeht.
PeterK
4

Sie können die Bildschirmgröße manuell überprüfen, um festzustellen, auf welchem ​​Gerät Sie sich befinden:

#define DEVICE_IS_IPHONE5 ([[UIScreen mainScreen] bounds].size.height == 568)

float height = DEVICE_IS_IPHONE5?568:480;
if (height == 568) {
    // 4"

} else {

    // 3"

}
Robot1987
quelle
3

Sie können diesen Code hinzufügen:

if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone){
        if ([[UIScreen mainScreen] respondsToSelector: @selector(scale)]) {
            CGSize result = [[UIScreen mainScreen] bounds].size;
            CGFloat scale = [UIScreen mainScreen].scale;
            result = CGSizeMake(result.width * scale, result.height * scale);

            if(result.height == 960) {
                NSLog(@"iPhone 4 Resolution");
            }
            if(result.height == 1136) {
              NSLog(@"iPhone 5 Resolution");
            }
        }
        else{
            NSLog(@"Standard Resolution");
        }
    }
dbramhall
quelle
2
Das ist eigentlich etwas falsch. Jedes iPhone mit iOS 4.0 oder höher reagiert auf die scaleAuswahl UIScreenund Sie haben einen Fall, in dem Ihr Code mit "Standardauflösung" nicht ausgeführt wird.
Filip Radelic
3

Dies ist ein echter universeller Code. Sie können 3 verschiedene Storyboards erstellen:

Stellen Sie den Universal-Modus Ihres Projekts ein und legen Sie Ihr iPhone mit dem iPhone5-Storyboard und das iPad-Haupt-Storyboard mit dem iPad-Ziel-Storyboard fest. Fügen Sie jetzt ein neues Storyboard-Ziel für das iPhone hinzu und ändern Sie die Auflösung für das iPhone 4s oder weniger. Implementieren Sie jetzt AppDelegate.m

iPhone4 / 4s (ist das gleiche für 3 / 3Gs) eines für iPhone5 und machen das Projekt universell , mit einem neuen Storyboard-Ziel für iPad, jetzt in AppDelegate.m unter dem folgenden didFinishLaunchingCode hinzufügen:

    if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone){
        UIStoryboard *storyBoard;

        CGSize result = [[UIScreen mainScreen] bounds].size;
        CGFloat scale = [UIScreen mainScreen].scale;
        result = CGSizeMake(result.width *scale, result.height *scale);

//----------------HERE WE SETUP FOR IPHONE4/4s/iPod----------------------

        if(result.height == 960){
            storyBoard = [UIStoryboard storyboardWithName:@"iPhone4_Storyboard" bundle:nil];
            UIViewController *initViewController = [storyBoard instantiateInitialViewController];
            [self.window setRootViewController:initViewController];
        }

//----------------HERE WE SETUP FOR IPHONE3/3s/iPod----------------------

        if(result.height == 480){
            storyBoard = [UIStoryboard storyboardWithName:@"iPhone4_Storyboard" bundle:nil];
            UIViewController *initViewController = [storyBoard instantiateInitialViewController];
            [self.window setRootViewController:initViewController];
        }
    }

        return YES;
 }

Sie haben also eine Universal-App für das iPhone 3 / 3Gs / 4 / 4s / 5 für alle iPod-Gen und alle iPad-Typen erstellt

Denken Sie daran, alle IMG in myImage.pngund zu integrieren[email protected]

Schwarzes Schaf
quelle
2

Meiner Meinung nach besteht die beste Möglichkeit, mit solchen Problemen umzugehen und einige für die Überprüfung der Gerätehöhe erforderliche Bedingungen zu vermeiden, darin, den relativen Rahmen für Ansichten oder ein beliebiges UI-Element zu verwenden, das Sie Ihrer Ansicht hinzufügen, z. B. wenn Sie hinzufügen Einige UI-Elemente, die Sie möchten, sollten sich am unteren Rand der Ansicht oder direkt über der Registerkartenleiste befinden. Dann sollten Sie den y-Ursprung in Bezug auf die Höhe Ihrer Ansicht oder in Bezug auf die Registerkartenleiste (falls vorhanden) verwenden. Wir haben auch die Eigenschaft zur automatischen Größenänderung. Ich hoffe das wird für dich funktionieren

Pranav Bhardwaj
quelle
1

Anstatt eine Reihe von Bedingungen zu verwenden, können Sie die Größe Ihrer Ansicht automatisch anhand der Bildschirmgröße ändern.

int h = [[UIScreen mainScreen] bounds].size.height;
int w = [[UIScreen mainScreen] bounds].size.width;
self.imageView.frame = CGRectMake(20, 80, (h-200), (w-100));

In meinem Fall möchte ich eine Ansicht, die den Raum zwischen einigen Eingabefeldern oben und einigen Schaltflächen unten ausfüllt, also oben links und unten rechts variabel, basierend auf der Bildschirmgröße. Meine App füllt die Bildansicht mit dem von der Kamera aufgenommenen Foto, sodass ich den gesamten verfügbaren Platz haben möchte.

Charles Jaimet
quelle
1

Wenn Sie eine bereits vorhandene App in Universal konvertieren müssen, müssen Sie die entsprechende xib-Datei-> Dienstprogramme anzeigen-> Größeninspektor anzeigen auswählen.

Im Größeninspektor sehen Sie die automatische Größenanpassung. Mit diesem Tool können Sie in eine vorhandene iOS-App konvertieren.

Prad
quelle
0

Wählen Sie mit xCode 5 unter Projekt> Allgemein die Option "In Asset-Katalog migrieren" aus.

Verwenden Sie dann "Im Finder anzeigen", um Ihr Startbild zu finden. Sie können es per Dummy auf 640 x 1136 bearbeiten und dann wie im Bild unten gezeigt in den Asset-Katalog ziehen.

Stellen Sie sicher, dass sowohl in iOS7 als auch in iOS6 R4 ein Bild mit einer Größe von 640 x 1136 vorhanden ist. Wenn Sie die App das nächste Mal starten, verschwinden die schwarzen Balken und Ihre App verwendet einen 4-Zoll-Bildschirm

Geben Sie hier die Bildbeschreibung ein

Alex Stone
quelle
0

Bemerkenswerter Punkt - In neuem Xcode müssen Sie diese Bilddatei [email protected] zu Assets hinzufügen

Michal Gumny
quelle
0

Verwenden Sie die Auto Layout Funktion für Ansichten. Es wird automatisch an alle Auflösungen angepasst.

Erstellen Sie zwei xibs für einen Controller mit dem Controllernamen mit dem Suffix ~ iphone oder ~ ipad. Zur Kompilierungszeit nimmt Xcode die richtige xib basierend auf dem Gerät.

Verwenden Sie Größenklassen, wenn Sie eine einzelne xib für iPhone und iPad erstellen möchten, wenn die Ansicht einfach genug ist, um auf iPhone und iPad zu portieren.

Praveen Matanam
quelle
0

Beim Testen auf iOS-Geräten und iOS-Simulatoren tritt ein kleines Problem auf. Es scheint, dass der Simulator (XCode 6.0.1) geschaltete Werte für Breite und Höhe in liefert[[UIScreen mainScreen] bounds].size je nach Ausrichtung des Geräts .

Dies kann also ein Problem bei der Bestimmung der richtigen physischen Bildschirmgröße sein. Dieser Code hilft auch, alle 2014 zu unterscheiden. IPhone-Modellgenerationen:

  • iPhone 4s
  • iPhone5 (und iPhone5s)
  • iPhone6 ​​(und iPhone6 ​​+)

Es kann auch leicht geändert werden, um zwischen z. B. iPhone6 ​​und iPhone6 ​​+ zu unterscheiden.

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

    CGSize iOSDeviceScreenSize = [[UIScreen mainScreen] bounds].size;

    if ([UIDevice currentDevice].userInterfaceIdiom == UIUserInterfaceIdiomPhone)
    {
        if (iOSDeviceScreenSize.width > 568 || // for iOS devices
            iOSDeviceScreenSize.height > 568) // for iOS simulator
        {   // iPhone 6 and iPhone 6+

            // Instantiate a new storyboard object using the storyboard file named Storyboard_iPhone6
            storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard_iPhone6" bundle:nil];

            NSLog(@"loaded iPhone6 Storyboard");
        }
        else if (iOSDeviceScreenSize.width == 568 || // for iOS devices
                 iOSDeviceScreenSize.height == 568) // for iOS simulator
        {   // iPhone 5 and iPod Touch 5th generation: 4 inch screen (diagonally measured)

            // Instantiate a new storyboard object using the storyboard file named Storyboard_iPhone5
            storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard_iPhone5" bundle:nil];

            NSLog(@"loaded iPhone5 Storyboard");
        }
        else
        {   // iPhone 3GS, 4, and 4S and iPod Touch 3rd and 4th generation: 3.5 inch screen (diagonally measured)

                // Instantiate a new storyboard object using the storyboard file named Storyboard_iPhone4
            storyboard = [UIStoryboard story    boardWithName:@"MainStoryboard_iPhone" bundle:nil];

                NSLog(@"loaded iPhone4 Storyboard");
        }
    }
    else if ([UIDevice currentDevice].userInterfaceIdiom == UIUserInterfaceIdiomPad)
    {   // The iOS device = iPad

        storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard_iPadnew" bundle:nil];

        NSLog(@"loaded iPad Storyboard");
    }

    // rest my code
}
Vedrano
quelle
0

Ich würde vorschlagen, die Autoresizing-Maske in Ihren Anwendungen entsprechend Ihrer Benutzeroberfläche zu verwenden. Dies spart viel Ärger und ist besser als die Erstellung einer anderen Benutzeroberfläche für iPhone 4 und 5-Bildschirme.

Geet
quelle