Bagaimana cara mengembangkan atau memigrasikan aplikasi untuk resolusi layar iPhone 5?


495

Layar iPhone 5 baru memiliki rasio aspek baru dan resolusi baru (640 x 1136 piksel).

Apa yang diperlukan untuk mengembangkan aplikasi baru atau transisi yang sudah ada ke ukuran layar baru?

Apa yang harus kita ingat untuk membuat aplikasi "universal" untuk tampilan lama dan rasio aspek layar lebar baru?

Jawaban:


481
  1. Unduh dan instal versi terbaru Xcode .
  2. Tetapkan File Layar Peluncuran untuk aplikasi Anda (di tab umum pengaturan target Anda). Ini adalah bagaimana Anda bisa menggunakan ukuran penuh layar apa pun, termasuk ukuran tampilan perpecahan iPad di iOS 9.
  3. Uji aplikasi Anda, dan semoga tidak melakukan apa-apa lagi, karena semuanya akan bekerja secara ajaib jika Anda telah mengatur masker pengubah ukuran otomatis dengan benar, atau menggunakan Tata Letak Otomatis.
  4. Jika tidak, sesuaikan tata letak tampilan Anda, sebaiknya dengan Tata Letak Otomatis.
  5. Jika ada sesuatu yang harus Anda lakukan untuk layar yang lebih besar secara khusus, maka sepertinya Anda harus memeriksa ketinggian [[UIScreen mainScreen] bounds]karena sepertinya tidak ada API khusus untuk itu. Pada iOS 8 ada juga kelas ukuran yang ukuran layar abstrak menjadi reguler atau kompak secara vertikal dan horizontal dan direkomendasikan cara untuk menyesuaikan UI Anda.

1
Mungkin ini masalah tembak-menembak. Resolusi dan rasio aspek baru? Autorotation baru? Tidaaaak! Sebenarnya, lebih banyak kontrol autorotation bisa menyenangkan.
Fistman Berirama

89
Perlu dicatat bahwa [UIImage imageNamed: @ "background.png"] masih akan hanya memuat "background.png" atau "background@2x.png", itu tidak akan memuat "background-568h@2x.png" jika ada .
tvon

1
Apakah menambahkan "Default-568h@2x.png" cukup atau ada opsi tambahan dalam pengaturan bangunan yang dapat / harus kita sesuaikan?
Lukasz

3
@Lukasz cukup (dan satu-satunya cara) untuk mendukung ketinggian 1136 px. Apakah aplikasi Anda akan meregang dengan benar tergantung pada bagaimana Anda mengatur tampilan Anda, tetapi bahkan jika Anda melakukan hard-coded segalanya, itu seharusnya tidak banyak pekerjaan untuk mengatur masker atau autolayout autoresizing.
Filip Radelic

1
@FilipRadelic - Resolusi yang Anda tentukan yaitu 1136 * 960, ist itu 1136 * 640 .. ?? ..
NiKKi

117

Jika Anda memiliki aplikasi yang dibangun untuk iPhone 4S atau yang lebih lama, itu akan dijalankan dengan huruf letter pada iPhone 5.

Untuk menyesuaikan aplikasi Anda dengan layar baru yang lebih tinggi, hal pertama yang Anda lakukan adalah mengubah gambar peluncuran ke: Default-568h@2x.png. Ukurannya harus 1136x640 (HxW).Yap, memiliki gambar default dalam ukuran layar baru adalah kunci untuk membiarkan aplikasi Anda mengambil seluruh layar iPhone 5 yang baru .

(Perhatikan bahwa konvensi penamaan hanya berfungsi untuk gambar default. Memberi nama gambar lain "Image-568h@2x.png" tidak akan membuatnya dimuat di tempat "Image@2x.png". Jika Anda perlu memuat gambar yang berbeda untuk ukuran layar yang berbeda, Anda harus melakukannya secara terprogram.)

Jika Anda sangat beruntung, itu mungkin saja ... tetapi kemungkinan besar, Anda harus mengambil beberapa langkah lagi.

  • Pastikan, Xibs / Tampilan Anda menggunakan tata letak otomatis untuk mengubah ukurannya sendiri.
  • Gunakan pegas dan struts untuk mengubah ukuran tampilan.
  • Jika ini tidak cukup baik untuk aplikasi Anda, rancang xib / storyboard Anda untuk satu ukuran layar tertentu dan posisikan ulang secara terprogram untuk yang lainnya.

Dalam kasus ekstrem (ketika tidak satu pun di atas mencukupi), desain dua Xibs dan muat yang sesuai di view controller.

Untuk mendeteksi ukuran layar:

if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)
{
    CGSize result = [[UIScreen mainScreen] bounds].size;
    if(result.height == 480)
    {
        // iPhone Classic
    }
    if(result.height == 568)
    {
        // iPhone 5
    }
}

hai sanjay, karena kita harus menemukan apakah iphone 5 atau yang lebih lama, jadi harus mengubah ukuran semuanya sesuai, seperti saya katakan saya memiliki tampilan tabel dengan ketinggian 367 dengan bar navigasi dan dan tabbar, saya harus mengubah ukuran untuk iphone 5
Raheel Sadiq

2
Bagaimana dengan iPod touch? Bagaimana dengan generasi iPhone berikutnya? Seseorang harus mengacu pada ukuran layar, 3.5
inci

2
Satu hal lain yang perlu diperhatikan adalah viewDidLoad dipanggil sebelum xib Anda diubah ukurannya, jadi jika Anda melakukan perhitungan berdasarkan hal-hal di nib, waspadai bagaimana posisi dapat berubah (atau lakukan perhitungan di viewWillAppear).
Kendall Helmstetter Gelner

30

Satu-satunya hal yang benar-benar diperlukan untuk dilakukan adalah menambahkan gambar peluncuran bernama "Default-568h@2x.png" ke sumber daya aplikasi, dan secara umum (jika Anda cukup beruntung) aplikasi akan bekerja dengan benar.

Jika aplikasi tidak menangani acara sentuh, maka pastikan bahwa jendela kunci memiliki ukuran yang tepat. Solusinya adalah mengatur frame yang tepat:

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

Ada masalah lain yang tidak terkait dengan ukuran layar saat bermigrasi ke iOS 6. Baca Catatan Rilis iOS 6.0 untuk detailnya.


22

Terkadang (untuk aplikasi pra-storyboard), jika tata letak akan cukup berbeda, ada baiknya menentukan xib yang berbeda sesuai perangkat (lihat pertanyaan ini - Anda harus memodifikasi kode untuk berurusan dengan iPhone 5) di viewController init, karena tidak ada jumlah mengutak-atik masker autoresizing akan bekerja jika Anda membutuhkan grafis yang berbeda.

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

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

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


...

Ini berguna untuk aplikasi yang menargetkan versi iOS yang lebih lama.


+1 Sesuatu yang melelahkan adalah kompatibilitas di masa depan. Saat ini potongan kode ini tidak aman karena hanya memperhitungkan perangkat iPhone 5, pemeriksaan ukuran layar akan menjadi alternatif yang lebih aman.
Stunner

Benar - ini bisa menjadi bagian dari utilitas yang mengembalikan tipe perangkat - itu hanya contoh untuk menunjukkan cara menggunakan nib yang berbeda, bukan tentang cara mendapatkan perangkat.
SomaMan

20

Di sini Anda dapat menemukan tutorial yang bagus (untuk MonoTouch, tetapi Anda juga dapat menggunakan informasi untuk proyek-proyek Non-MonoTouch):
http://redth.info/get-your-monotouch-apps-ready-for-iphone-5 -ios-6-hari ini /

  1. Buat gambar baru untuk layar splash / default Anda ( 640 x 1136 piksel ) dengan nama " Default-568h@2x.png "

  2. Di Simulator iOS , buka Perangkat Keras -> menu Perangkat, dan pilih " iPhone (Retina 4-inci) "

  3. Buat gambar lain, mis. Gambar latar belakang

  4. Deteksi iPhone 5 untuk memuat gambar baru Anda:

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

13

Sangat mudah untuk memigrasikan iPhone5 dan iPhone4 melalui XIB .........

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

12

Saya menyelesaikan masalah ini di sini . Cukup tambahkan ~ 568h @ 2x suffix ke gambar dan ~ 568h ke xib's. Tidak perlu lagi pemeriksaan runtime atau perubahan kode.


Cukup tambahkan kelas ini dalam proyek. Anda tidak perlu menulis kode tambahan. Misalnya, Anda memiliki satu file xib dengan gambar latar belakang dengan resolusi 320x480, 640x960, 640x1136 (iPhone 3, iPhone 4, iPhone 5). Cukup atur mask autoresizing yang benar dan beri nama gambar image.png, image@2x.png, image ~ 568h@2x.png.
Shimanski Artem

@ ShimanskiArtem Tapi saya perhatikan bahwa beberapa komponen lari ke posisi lain!, Apakah Anda punya ide ????
Adel

Periksa masker autoresizing Anda. Saya tidak melihat alasan lain.
Shimanski Artem

10

Saya telah menambahkan gambar peluncuran default baru dan (dalam memeriksa beberapa jawaban SE lainnya ...) memastikan storyboard saya semuanya berukuran sendiri dan disubmit tetapi retina 4 inci masih berbentuk letterbox.

Kemudian saya perhatikan bahwa daftar info saya memiliki item baris untuk " Luncurkan gambar " yang diatur ke " Default.png ", yang dengan demikian saya hapus dan kotak surat ajaib tidak lagi muncul. Mudah-mudahan, itu menyelamatkan orang lain kegilaan yang sama seperti yang saya alami.


9

Saya kira, ini tidak akan berfungsi dalam semua kasus, tetapi dalam proyek khusus saya itu menghindarkan saya dari duplikasi file NIB:

Di suatu tempat di dalam common.hAnda dapat membuat definisi ini berdasarkan ketinggian layar:

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

Di pengontrol dasar Anda:

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

9

Dalam sebuah constants.hfile Anda dapat menambahkan pernyataan define ini:

 #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)

9

Untuk menentukan apakah aplikasi Anda dapat mendukung iPhone 5 Retina gunakan ini: (Ini bisa lebih kuat untuk mengembalikan jenis layar, 4S Retina, dll., Tetapi seperti yang tertulis di bawah ini, itu hanya kembali jika iPhone mendukung iOS5 Retina sebagai Ya atau tidak)

Dalam file ".h" yang umum tambahkan:

BOOL IS_IPHONE5_RETINA(void);

Dalam file ".m" yang umum tambahkan:

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

8

Pertama-tama buat dua xibs dan lampirkan semua delegasi, kelas utama ke xibdan kemudian Anda dapat memasukkan kondisi yang disebutkan di bawah ini dalam appdelegate.mfile Anda di

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

        }

Anda dapat menggunakannya di mana saja dalam program tergantung pada kebutuhan Anda bahkan di ViewControllerkelas Anda . Yang paling penting adalah Anda membuat dua xibfile terpisahiphone 4(320*480) and iphone 5(320*568)


7

Coba metode di bawah ini dalam kelas tunggal:

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

7

Anda dapat menggunakan Auto Layoutfitur dan membuat desain menggunakan resolusi layar iPhone 5 dan itu akan bekerja untuk perangkat 4 "dan 3,5", tetapi dalam hal ini Anda harus memiliki pengetahuan yang cukup tentang tata letak manajer.


Ini tidak akan berfungsi untuk perangkat yang tidak mendukung iOS 6.
jonypz

7

Memeriksa boundsdengan568 akan gagal dalam modus lansekap. iPhone 5 diluncurkan hanya dalam mode potret tetapi jika Anda ingin mendukung rotasi maka iPhone 5 "check" perlu menangani skenario ini juga.

Inilah makro yang menangani status orientasi:

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

Penggunaan panggilan 'preferMode' berasal dari posting lain yang saya baca beberapa jam yang lalu jadi saya tidak menemukan ide ini.


6

Pertama-tama perlihatkan gambar ini. Dalam gambar itu Anda menunjukkan peringatan untuk dukungan Retina 4 jadi klik peringatan ini dan klik add sehingga layar splash Retina 4 Anda secara otomatis ditambahkan dalam proyek Anda.

Perlihatkan gambar di sini

dan setelah Anda menggunakan kode ini:

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

6

Saya tidak pernah menghadapi masalah dengan perangkat apa pun karena saya punya satu basis kode untuk semua, tanpa nilai hardcoded. Apa yang saya lakukan adalah memiliki gambar berukuran maksimum sebagai sumber daya alih-alih satu untuk setiap perangkat. Sebagai contoh, saya akan memiliki satu untuk tampilan retina dan menunjukkannya sebagai aspek fit sehingga akan dilihat seperti pada setiap perangkat. Datang untuk memutuskan kerangka tombol, misalnya, pada saat run time. Untuk ini saya menggunakan nilai% dari tampilan paten, misalnya, jika saya ingin lebar menjadi setengah dari tampilan induk ambil 50% dari induk dan berlaku sama untuk tinggi dan tengah.

Dengan ini saya bahkan tidak perlu xibs.


5

Anda dapat menggunakan definisi ini untuk menghitung jika Anda menggunakan iPhone 5 berdasarkan ukuran layar:

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

lalu gunakan ifpernyataan sederhana :

    if (IS_IPHONE_5) {

    // What ever changes
    }

4

Peter, Anda harus benar-benar melihat Canappi, itu melakukan semua itu untuk Anda, yang harus Anda lakukan adalah menentukan tata letak seperti itu:

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

Dari sana Canappi akan menghasilkan kode objektif-c yang benar yang mendeteksi perangkat yang sedang berjalan dan akan menggunakan:

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

Canappi berfungsi seperti Interface Builder dan Story Board yang digabungkan, kecuali bahwa itu dalam bentuk teks. Jika Anda sudah memiliki file XIB, Anda dapat mengonversinya sehingga Anda tidak perlu membuat ulang seluruh UI dari awal.


Terima kasih banyak meta, saya akan melihat ini tetapi saya seorang programmer yang sangat baru dan benar-benar ingin belajar bagaimana menangani ini di Objective-C bersih.
PeterK

4

Anda dapat secara manual memeriksa ukuran layar untuk menentukan perangkat mana yang Anda pakai:

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

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

} else {

    // 3"

}

3

Anda dapat menambahkan kode ini:

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

2
Ini sebenarnya sedikit salah. Setiap iPhone yang menjalankan iOS 4.0 atau lebih baru akan merespons scalepemilih pada UIScreendan Anda akan memiliki kasus di mana kode "resolusi standar" Anda tidak eksekutif.
Filip Radelic

3

Ini adalah kode universal nyata, Anda dapat membuat 3 papan cerita yang berbeda:

Tetapkan mode Universal proyek Anda, dan atur iPhone cerita utama Anda dengan storyboard iPhone5 dan ipad utama dengan storyboard target iPad, sekarang tambahkan target storyboard baru untuk iphone dan modifikasi resolusi untuk iphone 4s atau kurang sekarang implementasikan AppDelegate.m Anda

iPhone4 / 4s (sama untuk 3 / 3Gs) satu untuk iPhone5 dan menjadikan proyek universal , dengan target Storyboard baru untuk iPad, sekarang masuk ke AppDelegate.m di bawah didFinishLaunchingtambahkan kode ini:

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

Jadi, Anda telah membuat aplikasi Universal untuk iPhone 3 / 3Gs / 4 / 4s / 5 Semua gen iPod, dan Semua jenis iPad

Ingatlah untuk mengintegrasikan semua IMG dengan myImage.pngdanmyImage@2x.png


2

Menurut saya cara terbaik untuk mengatasi masalah seperti itu dan menghindari beberapa kondisi yang diperlukan untuk memeriksa ketinggian perangkat, adalah menggunakan kerangka relatif untuk tampilan atau elemen UI apa pun yang Anda tambahkan ke tampilan Anda misalnya: jika Anda menambahkan beberapa elemen UI yang Anda inginkan harus di bagian bawah tampilan atau tepat di atas bilah tab maka Anda harus mengambil asal y sehubungan dengan tinggi tampilan Anda atau sehubungan dengan bilah tab (jika ada) dan kami memiliki properti pengubahan ukuran otomatis juga. Saya harap ini akan berhasil untuk Anda


1

Daripada menggunakan serangkaian persyaratan, Anda dapat mengubah ukuran tampilan secara otomatis menggunakan ukuran layar.

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

Dalam kasus saya, saya ingin tampilan yang mengisi ruang antara beberapa bidang input di bagian atas dan beberapa tombol di bagian bawah, jadi perbaiki sudut kiri atas dan variabel kanan bawah berdasarkan ukuran layar. Aplikasi saya mengisi tampilan gambar dengan foto yang diambil oleh kamera sehingga saya ingin semua ruang yang saya dapatkan.


1

Jika Anda perlu mengonversi aplikasi yang sudah ada menjadi universal, Anda harus memilih file xib yang sesuai-> tampilkan Utilities-> Tampilkan Ukuran inspektur.

Di inspektur Ukuran Anda dapat melihat Autosizing, dengan menggunakan alat ini Anda dapat mengonversi ke Aplikasi iOS yang ada.


0

Menggunakan xCode 5, pilih "Migrasi ke Katalog Aset" di Project> General.

Kemudian gunakan "Show in finder" untuk menemukan gambar peluncuran Anda, Anda dapat mengedit-dummy menjadi 640x1136, lalu seret ke dalam katalog aset seperti yang ditunjukkan pada gambar di bawah.

Pastikan bagian iOS7 dan iOS6 R4 memiliki gambar 640x1136. Lain kali Anda meluncurkan aplikasi, bilah hitam akan menghilang, dan aplikasi Anda akan menggunakan layar 4 inci

masukkan deskripsi gambar di sini


0

Pemberitahuan bernilai poin - dalam Xcode baru Anda harus menambahkan file gambar ini Default-568h@2x.png ke aset


0

Menggunakan Auto Layout fitur ini untuk dilihat. Ini akan menyesuaikan secara otomatis ke semua resolusi.

Buat dua xibs untuk controller yang memiliki nama controller dengan akhiran ~ iphone atau ~ ipad. Pada waktu kompilasi, Xcode akan mengambil xib kanan berdasarkan perangkat.

Gunakan kelas ukuran, jika Anda ingin membuat xib tunggal untuk iPhone dan iPad, jika tampilan cukup sederhana untuk port ke iPhone dan iPad.


0

Ada sedikit masalah saat menguji pada perangkat iOS dan iOS Simulator. Tampaknya simulator (XCode 6.0.1) memberikan nilai yang diubah untuk lebar dan tinggi[[UIScreen mainScreen] bounds].size tergantung pada orientasi perangkat.

Jadi ini mungkin menjadi masalah ketika menentukan ukuran layar fisik yang tepat. Kode ini juga membantu membedakan semua 2014. Generasi model iPhone:

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

Itu juga dapat dengan mudah diubah untuk membuat perbedaan antara misalnya iPhone6 ​​dari 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
}

0

Saya akan menyarankan untuk menggunakan Autoresizing Mask di aplikasi Anda sesuai dengan antarmuka UI Anda, ini menghemat banyak masalah dan lebih baik daripada membuat UI yang berbeda untuk layar iPhone 4 dan 5.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.