Jak tworzyć lub migrować aplikacje dla rozdzielczości ekranu iPhone'a 5?

495

Nowy wyświetlacz iPhone'a 5 ma nowy współczynnik kształtu i nową rozdzielczość (640 x 1136 pikseli).

Co jest potrzebne do opracowania nowych lub przejścia już istniejących aplikacji do nowego rozmiaru ekranu?

O czym powinniśmy pamiętać, aby aplikacje były „uniwersalne” zarówno dla starszych wyświetlaczy, jak i nowego współczynnika proporcji ekranu panoramicznego?

Łukasz
źródło

Odpowiedzi:

481
  1. Pobierz i zainstaluj najnowszą wersję Xcode .
  2. Ustaw plik ekranu uruchamiania dla swojej aplikacji (na karcie ogólnej ustawień docelowych). W ten sposób możesz korzystać z pełnego rozmiaru dowolnego ekranu, w tym rozmiarów widoku podzielonego iPada w iOS 9.
  3. Przetestuj aplikację i, mam nadzieję, nie rób nic więcej, ponieważ wszystko powinno działać magicznie, jeśli poprawnie ustawiłeś maski automatycznego zmieniania rozmiaru lub użyłeś automatycznego układu.
  4. Jeśli tego nie zrobiłeś, dostosuj układ widoku, najlepiej za pomocą Auto-układu.
  5. Jeśli jest coś, co musisz zrobić specjalnie dla większych ekranów, wygląda na to, że musisz sprawdzić wysokość, [[UIScreen mainScreen] bounds]ponieważ wydaje się, że nie ma do tego konkretnego API. Począwszy od iOS 8 istnieją również klasy rozmiarów, które dzielą rozmiary ekranu na zwykłe lub kompaktowe w pionie i poziomie i są zalecanym sposobem dostosowania interfejsu użytkownika.
Filip Radelic
źródło
1
Może to kwestia strzelania do posłańca. Nowa rozdzielczość ORAZ proporcje? Nowa autorotacja? Nieeee! Właściwie lepsza może być kontrola autorotacji.
Rhythmic Fistman
89
Warto zauważyć, że [UIImage imageNamed: @ „background.png”] nadal ładuje tylko „background.png” lub „[email protected]”, nie ładuje „[email protected]”, jeśli istnieje .
tvon
1
Czy dodanie „[email protected]” jest wystarczające lub czy są jakieś dodatkowe opcje w ustawieniach kompilacji, które możemy / powinniśmy dostosować?
Łukasz
3
@L Łukasz wystarczy (i jedyny sposób), aby obsługiwać wysokość 1136 pikseli. To, czy aplikacja będzie się odpowiednio rozciągać, zależy od tego, jak skonfigurujesz swoje widoki, ale nawet jeśli wszystko zakodowałeś na stałe, konfiguracja masek autouzupełniania lub automatycznego układania nie powinna być trudna.
Filip Radelic,
1
@FilipRadelic - Określona rozdzielczość, tj. 1136 * 960, ist it 1136 * 640 .. ?? ..
NiKKi
117

Jeśli masz aplikację zbudowaną na iPhone'a 4S lub starszą wersję, będzie ona działać na iPhonie 5 w formie litery.

Aby dostosować aplikację do nowego wyższego ekranu, pierwszą rzeczą, którą należy zrobić, jest zmiana obrazu uruchamiania na: [email protected]. Jego rozmiar powinien wynosić 1136 x 640 (wys. X szer.). Tak, posiadanie domyślnego obrazu w nowym rozmiarze ekranu jest kluczem do tego, aby Twoja aplikacja zajęła cały ekran nowego iPhone'a 5 .

(Uwaga: konwencja nazewnictwa działa tylko dla obrazu domyślnego. Nazywanie innego obrazu „[email protected]” nie spowoduje załadowania go zamiast „[email protected]”. Jeśli musisz załadować różne obrazy dla różnych rozmiarów ekranu musisz to zrobić programowo.)

Jeśli masz dużo szczęścia, to może być to ... ale najprawdopodobniej będziesz musiał zrobić jeszcze kilka kroków.

  • Upewnij się, że Xibs / Views używają automatycznego układu do zmiany rozmiaru.
  • Użyj sprężyn i rozpórek, aby zmienić rozmiar widoków.
  • Jeśli nie jest to wystarczające dla Twojej aplikacji, zaprojektuj XIB / Storyboard dla jednego określonego rozmiaru ekranu i programowo repozycjonuj dla drugiego.

W skrajnym przypadku (gdy żadne z powyższych nie wystarczy), zaprojektuj dwa Xiby i załaduj odpowiedni do kontrolera widoku.

Aby wykryć rozmiar ekranu:

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
źródło
Cześć Sanjay, ponieważ musimy sprawdzić, czy jego iPhone 5 lub wcześniejszy, więc będziemy musieli odpowiednio zmienić rozmiar wszystkiego, tak jak mówię, że mam widok tabeli o wysokości 367 z paskiem nawigacji i paskiem, będę musiał zmienić rozmiar dla
iPhone'a
2
Co z iPodem touch? Co z następną generacją iPhone'a? Należy odnosić się do rozmiarów ekranu, 3,5 cala / 4 cale, a nie iPhone / iPhone5
valexa
2
Inną sprawą, na którą należy zwrócić uwagę, jest to, że viewDidLoad jest wywoływany przed zmianą rozmiaru xib, więc jeśli wykonujesz jakiekolwiek obliczenia w oparciu o rzeczy w stalówce, pamiętaj o tym, w jaki sposób pozycja może się zmieniać (lub wykonaj te obliczenia w viewWillAppear).
Kendall Helmstetter Gelner
30

Jedyną naprawdę wymaganą rzeczą jest dodanie obrazu uruchamiającego o nazwie „[email protected]” do zasobów aplikacji, a w ogólnym przypadku (jeśli masz szczęście) aplikacja będzie działać poprawnie.

Jeśli aplikacja nie obsługuje zdarzeń dotykowych, upewnij się, że okno klucza ma odpowiedni rozmiar. Obejściem tego problemu jest ustawienie odpowiedniej ramki:

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

Istnieją inne problemy niezwiązane z rozmiarem ekranu podczas migracji do iOS 6. Aby uzyskać szczegółowe informacje, przeczytaj Informacje o wersji iOS 6.0 .

onegray
źródło
22

Czasami (w przypadku aplikacji do tworzenia scenariuszy), jeśli układ będzie wystarczająco inny, warto określić inny xib w zależności od urządzenia (patrz to pytanie - musisz zmodyfikować kod, aby obsługiwał iPhone'a 5) w viewController init, ponieważ nie trzeba kręcić się przy użyciu masek automatycznej zmiany rozmiaru, jeśli potrzebujesz innej grafiki.

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

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

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


...

Jest to przydatne w przypadku aplikacji kierowanych na starsze wersje iOS.

SomaMan
źródło
+1 Jednak czymś, na co należy się martwić, jest kompatybilność w przyszłości. Obecnie ten fragment kodu nie jest bezpieczny, ponieważ uwzględnia tylko urządzenie iPhone 5, sprawdzanie rozmiaru ekranu byłoby bezpieczniejszą alternatywą.
Stunner,
To prawda - może to być część narzędzia zwracającego typ urządzenia - był to tylko przykład pokazujący, jak korzystać z różnych końcówek, a nie tak naprawdę o zakupie urządzenia.
SomaMan
20

Tutaj możesz znaleźć fajny samouczek (dla MonoTouch, ale możesz również użyć informacji dla projektów innych niż MonoTouch):
http://redth.info/get-your-monotouch-apps-ready-for-iphone-5 -ios-6-dzisiaj /

  1. Utwórz nowy obraz dla ekranu powitalnego / domyślnego ( 640 x 1136 pikseli ) o nazwie „ [email protected]

  2. W symulatorze iOS przejdź do menu Sprzęt -> Urządzenie i wybierz „ iPhone (Retina 4-calowy)

  3. Twórz inne obrazy, np. Obrazy tła

  4. Wykryj iPhone'a 5, aby załadować nowe zdjęcia:

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
źródło
13

Migracja iPhone5 i iPhone4 za pośrednictwem XIB jest łatwa .........

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
źródło
12

Rozwiązuję ten problem tutaj . Po prostu dodaj ~ 568h @ 2x do sufiksu i ~ 568h do xib's. Nie potrzeba więcej kontroli środowiska wykonawczego ani zmian kodu.

Shimanski Artem
źródło
Po prostu dodaj te klasy do projektu. Nie musisz pisać dodatkowego kodu. Na przykład masz jeden plik xib z obrazami w tle o rozdzielczości 320 x 480, 640 x 960, 640 x 1136 (iPhone 3, iPhone 4, iPhone 5). Wystarczy ustawić poprawną maskę automatycznej zmiany rozmiaru i nazwać obrazy image.png, [email protected], [email protected].
Shimanski Artem
@ShimanskiArtem Ale zauważam, że niektóre komponenty biegną w inne pozycje! Czy masz jakiś pomysł ????
Adel
Sprawdź swoje maski automatycznej zmiany rozmiaru. Nie widzę innego powodu.
Shimanski Artem
10

Dodałem nowy domyślny obraz startowy i (sprawdzając kilka innych odpowiedzi SE ...) upewniłem się, że wszystkie moje storyboardy same się zmieniają i wyświetlają się automatycznie, ale siatkówka 4 cale wciąż jest w kształcie litery.

Potem zauważyłem, że w mojej liście informacji znajdował się element zamówienia „ Uruchom obraz ” ustawiony na „ Default.png ”, który w ten sposób usunąłem i magicznie nie pojawiały się już litery. Mam nadzieję, że to ocali komuś to samo szaleństwo, które znosiłem.

SkeletonJelly
źródło
9

Wydaje mi się, że nie zadziała we wszystkich przypadkach, ale w moim konkretnym projekcie uniknąłem powielania plików NIB:

Gdzieś w środku common.hmożesz ustawić te definicje na podstawie wysokości ekranu:

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

W kontrolerze podstawowym:

- (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
źródło
9

W constants.hpliku możesz dodać następujące definicje instrukcji:

 #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)
Kok
źródło
9

Aby ustalić, czy aplikacja obsługuje iPhone'a 5 Retina, użyj tego: (Może być bardziej solidny, aby zwrócić typ wyświetlacza, Retina 4S itp., Ale jak napisano poniżej, po prostu zwraca, jeśli iPhone obsługuje siatkę iOS5 jako Tak lub nie)

We wspólnym pliku „.h” dodaj:

BOOL IS_IPHONE5_RETINA(void);

We wspólnym pliku „.m” dodaj:

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;
}
Mikrofon
źródło
8

Najpierw utwórz dwa xib i dołącz wszystkich delegatów, główną klasę do, xiba następnie możesz wprowadzić warunek wymieniony poniżej w swoim appdelegate.mpliku w

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

        }

możesz go używać w dowolnym miejscu w programie, w zależności od wymagań, nawet na ViewControllerzajęciach. Najważniejsze jest to, że utworzyłeś dwa xibosobne plikiiphone 4(320*480) and iphone 5(320*568)

mandeep
źródło
7

Wypróbuj poniższą metodę w klasie singleton:

-(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
źródło
7

Możesz użyć tej Auto Layoutfunkcji i stworzyć projekt za pomocą ekranu iPhone'a 5 i będzie on działał zarówno na urządzeniach 4 ", jak i 3,5", ale w takim przypadku powinieneś mieć wystarczającą wiedzę na temat menedżera układu.

DeveshM
źródło
Nie działa to jednak na urządzeniach, które nie obsługują iOS 6.
jonypz
7

Sprawdzanie za boundspomocą 568zakończy się niepowodzeniem w trybie poziomym. iPhone 5 uruchamia się tylko w trybie pionowym, ale jeśli chcesz obsługiwać rotacje, to „sprawdzenie” iPhone'a 5 również będzie musiało obsłużyć ten scenariusz.

Oto makro, które obsługuje stan orientacji:

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

Wykorzystanie wywołania „preferowanego trybu” pochodzi z innego posta, który przeczytałem kilka godzin temu, więc nie wpadłem na ten pomysł.

Krzysztof
źródło
6

Najpierw pokaż ten obraz. Na tym obrazku pokazujesz ostrzeżenie dotyczące obsługi Retina 4, więc kliknij to ostrzeżenie i kliknij dodaj, aby ekran powitalny Retina 4 automatycznie dodawał do twojego projektu.

Pokaż zdjęcie tutaj

a po użyciu tego kodu:

if([[UIScreen mainScreen] bounds].size.height == 568)
    {
        // For iphone 5
    }
    else
    {
        // For iphone 4 or less
    }
Darshan Kunjadiya
źródło
6

Nigdy nie spotkałem się z takim problemem z żadnym urządzeniem, ponieważ miałem jedną bazę kodu dla wszystkich, bez żadnych zakodowanych wartości. To, co robię, to mieć maksymalny rozmiar obrazu jako zasób zamiast jednego dla każdego urządzenia. Na przykład miałbym jeden do wyświetlania na siatkówce i pokazałbym go jako dopasowany do kształtu, aby był to widok jak na każdym urządzeniu. Podejmowanie decyzji na temat ramki przycisku, na przykład w czasie wykonywania. W tym celu używam wartości% widoku patentu, na przykład, jeśli chcę, aby szerokość była w połowie widoku rodzica, weź 50% rodzica i to samo dotyczy wysokości i środka.

Dzięki temu nie potrzebuję nawet XIB.

nieskończona pętla
źródło
5

Możesz użyć tej definicji, aby obliczyć, czy używasz iPhone'a 5 na podstawie rozmiaru ekranu:

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

następnie użyj prostej ifinstrukcji:

    if (IS_IPHONE_5) {

    // What ever changes
    }
Mutawe
źródło
4

Peter, naprawdę powinieneś rzucić okiem na Canappi, robi to wszystko dla ciebie, wszystko co musisz zrobić, to określić układ jako taki:

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

Stamtąd Canappi wygeneruje poprawny kod C celu, który wykrywa urządzenie, na którym działa aplikacja i użyje:

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

Canappi działa w połączeniu z Konstruktorem interfejsów i Story Board, z tym że ma formę tekstową. Jeśli masz już pliki XIB, możesz je przekonwertować, aby nie trzeba było ponownie tworzyć całego interfejsu użytkownika od zera.

metaprogrammer
źródło
Dzięki wielkie meta, przyjrzę się temu, ale jestem bardzo nowym programistą i naprawdę chciałbym nauczyć się, jak sobie z tym poradzić w czystym Objective-C.
PeterK
4

Możesz ręcznie sprawdzić rozmiar ekranu, aby określić, na jakim urządzeniu się znajdujesz:

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

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

} else {

    // 3"

}
Robot1987
źródło
3

Możesz dodać ten kod:

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
źródło
2
To jest właściwie trochę źle. Każdy iPhone z systemem iOS 4.0 lub nowszym zareaguje na scaleselektor włączony UIScreeni będziesz mieć przypadek, w którym kod „standardowej rozdzielczości” nie zostanie wykonany.
Filip Radelic,
3

To jest naprawdę uniwersalny kod, możesz stworzyć 3 różne scenariusze:

Ustaw swój projekt Tryb uniwersalny i ustaw główną historię iPhone'a za pomocą scenorysu iPhone5 i iPada głównego za pomocą storyboardu docelowego iPada, teraz dodaj nowy cel storyboardu dla iPhone'a i zmodyfikuj rozdzielczość dla iPhone 4s lub mniej teraz zaimplementuj swoją AppDelegate.m

iPhone4 / 4s (jest taki sam dla 3 / 3Gs) jeden dla iPhone5 i uczyń projekt uniwersalnym , z nowym celem Storyboard dla iPada, teraz w AppDelegate.m pod dodanymdidFinishLaunching kodem:

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

Stworzyłeś więc aplikację Universal na iPhone'a 3 / 3Gs / 4 / 4s / 5 All gen iPoda i All iPada

Pamiętaj, aby zintegrować wszystkie IMG z myImage.pngi[email protected]

Czarna Owca
źródło
2

Według mnie najlepszym sposobem radzenia sobie z takimi problemami i unikaniem kilku warunków wymaganych do sprawdzania wysokości urządzenia, jest użycie ramki względnej dla widoków lub dowolnego elementu interfejsu użytkownika, który dodajesz do widoku, na przykład: jeśli dodajesz jakiś element interfejsu użytkownika, który chcesz, powinien znajdować się na dole widoku lub tuż nad paskiem tabulatorów, a następnie powinieneś wziąć początek y w odniesieniu do wysokości widoku lub względem paska tabulatorów (jeśli jest obecny), a my również mamy właściwość automatycznej zmiany rozmiaru. Mam nadzieję, że to zadziała dla ciebie

Pranav Bhardwaj
źródło
1

Zamiast korzystać z zestawu warunków, możesz automatycznie zmienić rozmiar widoku przy użyciu rozmiaru ekranu.

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

W moim przypadku chcę widok, który wypełnia przestrzeń między niektórymi polami wejściowymi u góry i niektórymi przyciskami u dołu, więc naprawiłem lewy górny róg i zmienną prawą dolną w zależności od wielkości ekranu. Moja aplikacja wypełnia widok zdjęcia zdjęciem wykonanym przez aparat, więc chcę mieć tyle miejsca, ile mogę.

Charles Jaimet
źródło
1

Jeśli chcesz przekonwertować już istniejącą aplikację na uniwersalną, musisz wybrać odpowiedni plik xib-> pokaż Narzędzia-> Pokaż inspektora Rozmiar.

W Inspektorze rozmiarów możesz zobaczyć Automatyczną zmianę rozmiaru, za pomocą tego narzędzia możesz przekonwertować na istniejącą aplikację iOS.

Prad
źródło
0

Za pomocą xCode 5 wybierz „Migruj do katalogu zasobów” w Projekt> Ogólne.

Następnie użyj „Pokaż w wyszukiwarce”, aby znaleźć obraz startowy, możesz go edytować w formacie fikcyjnym (640 x 1136), a następnie przeciągnij go do katalogu zasobów, jak pokazano na poniższym obrazku.

Upewnij się, że zarówno sekcja iOS7, jak i iOS6 R4 ma obraz 640 x 1136. Następnym razem, gdy uruchomisz aplikację, czarne paski znikną, a Twoja aplikacja będzie używać 4-calowego ekranu

wprowadź opis zdjęcia tutaj

Alex Stone
źródło
0

Użyj Auto Layout funkcji dla widoków. Dostosuje się automatycznie do wszystkich rozdzielczości.

Utwórz dwa xib dla kontrolera o nazwie kontrolera z sufiksem ~ iphone lub ~ ipad. W czasie kompilacji Xcode weźmie odpowiedni xib w zależności od urządzenia.

Użyj klas rozmiarów, jeśli chcesz utworzyć pojedynczy xib zarówno dla iPhone'a, jak i iPada, jeśli widok jest wystarczająco prosty, aby przenieść go na iPhone'a i iPada.

Praveen Matanam
źródło
0

Występuje niewielki problem podczas testowania zarówno na urządzeniu z systemem iOS, jak i na symulatorze systemu iOS. Wygląda na to, że symulator (XCode 6.0.1) podaje przełączane wartości szerokości i wysokości w[[UIScreen mainScreen] bounds].size zależności od orientacji urządzenia.

Może to stanowić problem przy określaniu właściwego fizycznego rozmiaru ekranu. Ten kod pomaga również rozróżnić wszystkie 2014. Generacje modeli iPhone'a:

  • iPhone4s
  • iPhone5 (i iPhone5s)
  • iPhone6 ​​(i iPhone6 ​​+)

Można go również łatwo zmienić, aby odróżnić np. IPhone6 ​​od iPhone6 ​​+.

- (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
źródło
0

Sugerowałbym użycie maski automatycznej zmiany rozmiaru w swoich aplikacjach zgodnie z interfejsem użytkownika, pozwala to zaoszczędzić wiele problemów i jest lepsze niż tworzenie innego interfejsu użytkownika dla ekranów iPhone 4 i 5.

Geet
źródło