Làm cách nào để phát triển hoặc di chuyển ứng dụng cho độ phân giải màn hình iPhone 5?


495

Màn hình iPhone 5 mới có tỷ lệ khung hình mới và độ phân giải mới (640 x 1136 pixel).

Điều gì cần thiết để phát triển các ứng dụng mới hoặc đã chuyển sang kích thước màn hình mới?

Chúng ta nên ghi nhớ điều gì để làm cho các ứng dụng trở nên "phổ quát" cho cả màn hình cũ và tỷ lệ khung hình màn hình rộng mới?

Câu trả lời:


481
  1. Tải xuống và cài đặt phiên bản Xcode mới nhất .
  2. Đặt Tệp màn hình khởi chạy cho ứng dụng của bạn (trong tab chung của cài đặt mục tiêu của bạn). Đây là cách bạn có thể sử dụng kích thước đầy đủ của bất kỳ màn hình nào, bao gồm kích thước chế độ xem chia tách iPad trong iOS 9.
  3. Kiểm tra ứng dụng của bạn và hy vọng không làm gì khác, vì mọi thứ sẽ hoạt động kỳ diệu nếu bạn đã đặt mặt nạ tự động thay đổi kích thước đúng cách hoặc sử dụng Bố cục tự động.
  4. Nếu bạn không, hãy điều chỉnh bố cục chế độ xem của bạn, tốt nhất là với Bố cục tự động.
  5. Nếu có một cái gì đó bạn phải làm cho các màn hình lớn hơn, thì có vẻ như bạn phải kiểm tra chiều cao [[UIScreen mainScreen] bounds]vì dường như không có API cụ thể cho điều đó. Kể từ iOS 8, cũng có các lớp kích thước mà kích thước màn hình trừu tượng thành thường xuyên hoặc nhỏ gọn theo chiều dọc và chiều ngang và là cách được khuyến nghị để điều chỉnh giao diện người dùng của bạn.

1
Có lẽ đó là một thứ bắn súng. Độ phân giải VÀ tỷ lệ khung hình mới? Autorotation mới? Không! Trên thực tế, kiểm soát autorotation nhiều hơn có thể là tốt đẹp.
Fistman nhịp điệu

89
Điều đáng chú ý là [UIImage image Named: @ "background.png"] sẽ vẫn chỉ tải "background.png" hoặc "background@2x.png", nó sẽ không tải "background-568h@2x.png" nếu nó tồn tại .
tvon

1
Việc thêm "Mặc định-568h@2x.png" đã đủ chưa hoặc có thêm tùy chọn nào trong cài đặt bản dựng mà chúng tôi có thể / nên điều chỉnh không?
Lukasz

3
@Lukasz là đủ (và cách duy nhất) để hỗ trợ chiều cao 1136 px. Ứng dụng của bạn sẽ mở rộng đúng cách tùy thuộc vào cách bạn thiết lập chế độ xem của mình, nhưng ngay cả khi bạn đã mã hóa mọi thứ, thì cũng không nên làm nhiều việc để thiết lập mặt nạ tự động hoặc tự động thoát.
Filip Radelic

1
@FilipRadelic - Độ phân giải bạn đã chỉ định tức là 1136 * 960, tức là 1136 * 640 .. ?? ..
NiKKi

117

Nếu bạn có một ứng dụng được xây dựng cho iPhone 4S trở về trước, nó sẽ chạy hộp thư trên iPhone 5.

Để điều chỉnh ứng dụng của bạn với màn hình cao hơn mới, điều đầu tiên bạn làm là thay đổi hình ảnh khởi chạy thành: Mặc định-568h@2x.png. Kích thước của nó phải là 1136x640 (HxW). Đúng, có hình ảnh mặc định ở kích thước màn hình mới là chìa khóa để cho ứng dụng của bạn lấy toàn bộ màn hình của iPhone 5 mới .

(Lưu ý rằng quy ước đặt tên chỉ hoạt động cho hình ảnh mặc định. Đặt tên cho hình ảnh khác "Image-568h@2x.png" sẽ không khiến nó được tải thay cho "Image@2x.png". Nếu bạn cần tải các hình ảnh khác nhau. đối với các kích thước màn hình khác nhau, bạn sẽ phải thực hiện theo chương trình.)

Nếu bạn rất may mắn, đó có thể là ... nhưng rất có thể, bạn sẽ phải thực hiện thêm một vài bước nữa.

  • Đảm bảo, Xibs / Lượt xem của bạn sử dụng bố cục tự động để tự thay đổi kích thước.
  • Sử dụng lò xo và thanh chống để thay đổi kích thước khung nhìn.
  • Nếu điều này không đủ tốt cho ứng dụng của bạn, hãy thiết kế xib / bảng phân cảnh của bạn cho một kích thước màn hình cụ thể và định vị lại theo chương trình cho cái kia.

Trong trường hợp cực đoan (khi không có điều nào ở trên đủ), hãy thiết kế hai Xibs và tải cái thích hợp trong bộ điều khiển xem.

Để phát hiện kích thước màn hình:

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

chào sanjay, vì chúng tôi phải tìm xem iphone 5 của nó sớm hơn hay không, vì vậy tôi sẽ phải thay đổi kích thước mọi thứ cho phù hợp, như tôi nói tôi có một cái bàn với chiều cao 367 với thanh điều hướng và thanh tab, tôi sẽ phải thay đổi kích thước cho iphone 5
Raheel Sadiq

2
IPod touch thì sao? Thế hệ iPhone tiếp theo thì sao? Bạn nên tham khảo kích thước màn hình, 3,5 inch / 4 inch không phải iPhone / iPhone5
valexa

2
Một vấn đề khác cần chú ý là viewDidLoad được gọi trước khi xib của bạn được thay đổi kích thước, vì vậy nếu bạn đang thực hiện bất kỳ phép tính nào dựa trên mọi thứ trong nib, hãy chú ý đến cách vị trí có thể thay đổi (hoặc thực hiện các tính toán trong viewWillAppear).
Kendall Helmstetter Gelner

30

Điều thực sự cần thiết là phải thêm hình ảnh khởi chạy có tên "Mặc định-568h@2x.png" vào tài nguyên ứng dụng và trong trường hợp chung (nếu bạn đủ may mắn), ứng dụng sẽ hoạt động chính xác.

Trong trường hợp ứng dụng không xử lý các sự kiện chạm, thì hãy đảm bảo rằng cửa sổ phím có kích thước phù hợp. Cách giải quyết là đặt khung thích hợp:

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

Có các vấn đề khác không liên quan đến kích thước màn hình khi di chuyển sang iOS 6. Đọc Ghi chú phát hành iOS 6.0 để biết chi tiết.


22

Đôi khi (đối với các ứng dụng tiền truyện), nếu bố cục sẽ đủ khác nhau, bạn nên chỉ định một xib khác theo thiết bị (xem câu hỏi này - bạn sẽ cần sửa đổi mã để xử lý iPhone 5) trong viewContoder init, vì không có sự thay đổi nào với mặt nạ tự động sẽ hoạt động nếu bạn cần đồ họa khác.

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

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

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


...

Điều này hữu ích cho các ứng dụng nhắm mục tiêu các phiên bản iOS cũ hơn.


+1 Tuy nhiên, một cái gì đó để mệt mỏi là khả năng tương thích. Hiện tại đoạn mã này không an toàn vì nó chỉ tính đến thiết bị iPhone 5, kiểm tra kích thước màn hình sẽ là sự thay thế an toàn hơn.
Stunner

Đúng - đây có thể là một phần của tiện ích trả về loại thiết bị - nó chỉ là một ví dụ để chỉ ra cách sử dụng các ngòi khác nhau, không thực sự về việc lấy thiết bị.
SomaMan

20

Tại đây, bạn có thể tìm thấy một hướng dẫn thú vị (cho MonoTouch, nhưng bạn cũng có thể sử dụng thông tin cho các dự án không phải MonoTouch): http://redth.info/get-your-monotouch-apps- yet-for-iphone-5
-ios-6-hôm nay /

  1. Tạo một hình ảnh mới cho màn hình giật gân / mặc định của bạn ( 640 x 1136 pixel ) với tên "Mặc định-568h@2x.png "

  2. Trong Trình mô phỏng iOS , đi tới menu Phần cứng -> Thiết bị và chọn " iPhone (Retina 4 inch) "

  3. Tạo các hình ảnh khác, ví dụ như hình nền

  4. Phát hiện iPhone 5 để tải hình ảnh mới của bạn:

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

Thật dễ dàng để di chuyển iPhone5 và iPhone4 thông qua XIBs .........

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

Tôi giải quyết vấn đề này ở đây . Chỉ cần thêm hậu tố ~ 568h @ 2x vào hình ảnh và ~ 568h vào xib's. Không cần kiểm tra thời gian chạy nhiều hơn hoặc thay đổi mã.


Chỉ cần thêm các lớp này trong dự án. Bạn không cần phải viết thêm mã. Ví dụ: bạn có một tệp xib với hình nền có độ phân giải 320x480, 640x960, 640x1136 (iPhone 3, iPhone 4, iPhone 5). Chỉ cần đặt mặt nạ tự động chính xác và đặt tên hình ảnh image.png, image@2x.png, image~568h@2x.png.
Shimanski Artem

@ShimanskiArtem Nhưng tôi nhận thấy rằng một số thành phần chạy đến vị trí khác! Bạn có ý kiến ​​gì không ????
Adel

Kiểm tra mặt nạ tự động của bạn. Tôi thấy không có lý do khác.
Shimanski Artem

10

Tôi đã thêm hình ảnh khởi chạy mặc định mới và (khi kiểm tra một số câu trả lời SE khác ...) đảm bảo rằng các bảng phân cảnh của tôi đều có kích thước tự động và các cuộc phỏng vấn nhưng võng mạc 4 inch vẫn được đóng hộp.

Sau đó, tôi nhận thấy rằng thông tin của tôi có một mục hàng cho " Khởi chạy hình ảnh " được đặt thành " Default.png ", do đó tôi đã xóa và hộp thư kỳ diệu không còn xuất hiện nữa. Hy vọng rằng, điều đó sẽ cứu người khác cùng một sự điên rồ mà tôi chịu đựng.


9

Tôi đoán, nó sẽ không hoạt động trong mọi trường hợp, nhưng trong dự án cụ thể của tôi, nó đã tránh cho tôi sao chép các tệp NIB:

Một nơi nào đó trong common.hbạn có thể thực hiện các định nghĩa này dựa trên chiều cao màn hình:

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

Trong bộ điều khiển cơ sở của bạn:

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

Trong một constants.htệp, bạn có thể thêm các câu lệnh xác định sau:

 #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

Để xác định xem ứng dụng của bạn có thể hỗ trợ Retina cho iPhone 5 hay không, hãy sử dụng điều này: (Điều này có thể mạnh mẽ hơn để trả về loại màn hình, 4S Retina, v.v., nhưng như được viết dưới đây, nó chỉ trả về nếu iPhone hỗ trợ Retina iOS5 như một Có hay không)

Trong tệp ".h" chung, thêm:

BOOL IS_IPHONE5_RETINA(void);

Trong tệp ".m" chung, thêm:

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

Trước hết, tạo hai xibs và đính kèm tất cả các đại biểu, lớp chính vào xibvà sau đó bạn có thể đặt trong điều kiện này được đề cập dưới đây trong appdelegate.mtệp của bạn trong

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

        }

bạn có thể sử dụng nó bất cứ nơi nào trong chương trình tùy thuộc vào yêu cầu của bạn ngay cả trong các ViewControllerlớp học của bạn . Điều quan trọng nhất là bạn đã tạo hai xibtệp riêng biệt choiphone 4(320*480) and iphone 5(320*568)


7

Hãy thử phương pháp dưới đây trong một lớp đơn:

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

Bạn có thể sử dụng Auto Layouttính năng và tạo thiết kế bằng độ phân giải màn hình iPhone 5 và nó sẽ hoạt động cho cả thiết bị 4 "và 3.5", nhưng trong trường hợp này bạn nên có đủ kiến ​​thức về trình quản lý bố cục.


Điều này sẽ không hoạt động đối với các thiết bị không hỗ trợ iOS 6.
jonypz

7

Kiểm tra boundsvới 568sẽ thất bại trong chế độ ngang. iPhone 5 chỉ khởi chạy ở chế độ dọc nhưng nếu bạn muốn hỗ trợ xoay thì "kiểm tra" iPhone 5 cũng sẽ cần xử lý tình huống này.

Đây là một macro xử lý trạng thái định hướng:

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

Việc sử dụng cuộc gọi 'preferMode' là từ một bài đăng khác mà tôi đã đọc cách đây vài giờ nên tôi không nghĩ ra ý tưởng này.


6

Đầu tiên hiển thị hình ảnh này. Trong hình ảnh đó, bạn hiển thị cảnh báo cho hỗ trợ Retina 4, vì vậy hãy nhấp vào cảnh báo này và nhấp vào thêm để màn hình giật gân Retina 4 của bạn tự động thêm vào dự án của bạn.

Hiển thị hình ảnh ở đây

và sau khi bạn sử dụng mã này:

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

6

Tôi chưa bao giờ phải đối mặt với một vấn đề như vậy với bất kỳ thiết bị nào vì tôi đã có một cơ sở mã cho tất cả, mà không có bất kỳ giá trị mã hóa cứng nào. Những gì tôi làm là để có hình ảnh có kích thước tối đa làm tài nguyên thay vì một hình ảnh cho mỗi thiết bị. Ví dụ: tôi sẽ có một màn hình cho màn hình võng mạc và hiển thị nó là phù hợp với khía cạnh để nó sẽ là chế độ xem như trên mọi thiết bị. Đến để quyết định khung của nút, ví dụ, tại thời gian chạy. Đối với điều này, tôi sử dụng giá trị% của chế độ xem bằng sáng chế, ví dụ: nếu tôi muốn chiều rộng bằng một nửa của chế độ xem cha mẹ thì lấy 50% phụ huynh và áp dụng tương tự cho chiều cao và trung tâm.

Với điều này, tôi thậm chí không cần xibs.


5

Bạn có thể sử dụng định nghĩa này để tính toán nếu bạn đang sử dụng iPhone 5 dựa trên kích thước màn hình:

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

sau đó sử dụng một ifcâu lệnh đơn giản :

    if (IS_IPHONE_5) {

    // What ever changes
    }

4

Peter, bạn thực sự nên xem Canappi, nó làm tất cả những gì cho bạn, tất cả những gì bạn phải làm là chỉ định bố cục như vậy:

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

Từ đó Canappi sẽ tạo mã object-c chính xác phát hiện thiết bị mà ứng dụng đang chạy và sẽ sử dụng:

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

Canappi hoạt động như Interface Builder và Story Board kết hợp, ngoại trừ việc nó ở dạng văn bản. Nếu bạn đã có tệp XIB, bạn có thể chuyển đổi chúng để không phải tạo lại toàn bộ giao diện người dùng từ đầu.


Cảm ơn rất nhiều meta, tôi sẽ xem xét điều này nhưng tôi là một lập trình viên rất mới và thực sự muốn học cách xử lý việc này trong Objective-C sạch.
PeterK

4

Bạn có thể kiểm tra kích thước màn hình theo cách thủ công để xác định thiết bị nào bạn đang bật:

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

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

} else {

    // 3"

}

3

Bạn có thể thêm mã này:

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
Điều này thực sự hơi sai. Bất kỳ iPhone nào chạy iOS 4.0 trở lên sẽ phản hồi với scalebộ chọn UIScreenvà bạn sẽ gặp trường hợp mã "độ phân giải tiêu chuẩn" của bạn không thực thi.
Filip Radelic

3

Đây là một mã phổ quát thực sự, bạn có thể tạo 3 bảng câu chuyện khác nhau:

Đặt dự án Chế độ phổ quát của bạn và đặt iPhone câu chuyện chính của bạn với bảng phân cảnh iPhone5 và ipad chính với bảng phân cảnh mục tiêu iPad, bây giờ thêm mục tiêu bảng phân cảnh mới cho iphone và sửa đổi độ phân giải cho iphone 4s hoặc ít hơn bây giờ triển khai AppDelegate.m của bạn

iPhone4 / 4s (tương tự với 3 / 3G) một chiếc cho iPhone5 và làm cho dự án trở nên phổ biến , với mục tiêu Storyboard mới cho iPad, giờ đây được đưa vào AppDelegate.m theo didFinishLaunchingmã này:

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

Vì vậy, bạn đã tạo một ứng dụng Universal cho iPhone 3 / 3Gs / 4 / 4s / 5 Tất cả các loại iPod và Tất cả các loại iPad

Nhớ tích hợp tất cả IMG với myImage.pngmyImage@2x.png


2

Theo tôi cách tốt nhất để xử lý các vấn đề như vậy và tránh một vài điều kiện cần thiết để kiểm tra chiều cao của thiết bị, là sử dụng khung tương đối cho các chế độ xem hoặc bất kỳ thành phần UI nào mà bạn đang thêm vào xem: ví dụ: nếu bạn đang thêm một số thành phần UI mà bạn muốn ở cuối chế độ xem hoặc ngay phía trên thanh tab thì bạn nên lấy gốc y đối với chiều cao của chế độ xem hoặc đối với thanh tab (nếu có) và chúng tôi cũng tự động thay đổi kích thước thuộc tính. Tôi hy vọng điều này sẽ làm việc cho bạn


1

Thay vì sử dụng một tập hợp các điều kiện, bạn có thể tự động thay đổi kích thước chế độ xem của mình bằng kích thước màn hình.

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

Trong trường hợp của tôi, tôi muốn một chế độ xem lấp đầy khoảng trống giữa một số trường đầu vào ở trên cùng và một số nút ở phía dưới, do đó, cố định góc trên cùng bên trái và dưới cùng bên phải dựa trên kích thước màn hình. Ứng dụng của tôi lấp đầy chế độ xem hình ảnh bằng ảnh được chụp bởi máy ảnh để tôi muốn tất cả không gian tôi có thể có.


1

Nếu bạn cần chuyển đổi một ứng dụng đã có sẵn thành phổ quát, bạn cần chọn tệp xib tương ứng-> hiển thị Tiện ích-> Hiển thị trình kiểm tra Kích thước.

Trong Trình kiểm tra kích thước, bạn có thể thấy Tự động hóa, bằng cách sử dụng công cụ này, bạn có thể chuyển đổi sang Ứng dụng iOS hiện có.


0

Sử dụng xCode 5, chọn "Di chuyển vào danh mục tài sản" trên Project> General.

Sau đó sử dụng "Show in finder" để tìm hình ảnh khởi chạy của bạn, bạn có thể chỉnh sửa nó thành 640x1136, sau đó kéo nó vào danh mục tài sản như trong hình bên dưới.

Đảm bảo rằng cả phần R4 của iOS7 và iOS6 đều có hình ảnh là 640x1136. Lần tới khi bạn khởi chạy ứng dụng, các thanh màu đen sẽ biến mất và ứng dụng của bạn sẽ sử dụng màn hình 4 inch

nhập mô tả hình ảnh ở đây


0

Điểm đáng chú ý - trong Xcode mới, bạn phải thêm tệp hình ảnh này Mặc định-568h@2x.png vào tài sản


0

Sử dụng Auto Layout tính năng để xem. Nó sẽ tự động điều chỉnh cho tất cả các độ phân giải.

Tạo hai xibs cho bộ điều khiển có tên bộ điều khiển có hậu tố ~ iphone hoặc ~ ipad. Tại thời điểm biên dịch, Xcode sẽ lấy đúng xib dựa trên thiết bị.

Sử dụng các lớp kích thước, nếu bạn muốn tạo một xib duy nhất cho cả iPhone và iPad, nếu chế độ xem đủ đơn giản để chuyển sang iPhone và iPad.


0

Có một vấn đề nhỏ khi thử nghiệm trên cả thiết bị iOS và Trình mô phỏng iOS. Dường như trình giả lập (XCode 6.0.1) cung cấp các giá trị được chuyển đổi cho chiều rộng và chiều cao [[UIScreen mainScreen] bounds].sizetùy thuộc vào hướng của thiết bị.

Vì vậy, đây có thể là một vấn đề khi xác định kích thước màn hình vật lý phù hợp. Mã này cũng giúp phân biệt tất cả các thế hệ 2014. Các mẫu iPhone:

  • iPhone 4s
  • iPhone5 (và iPhone5)
  • iPhone6 ​​(và iPhone6 ​​+)

Nó cũng có thể dễ dàng thay đổi để phân biệt giữa iPhone6 ​​với 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

Tôi sẽ đề nghị sử dụng Autoresizing Mask trong các ứng dụng của bạn theo giao diện UI của bạn, nó sẽ tiết kiệm rất nhiều rắc rối và tốt hơn là tạo UI khác nhau cho màn hình iPhone 4 và 5.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.