2013-01-02 71 views
3

我想爲iPhone5用戶調整背景靜態UIImageView(從Nib文件)的大小。不幸的是,下面的代碼似乎對背景視圖的大小沒有任何影響。XCODE:調整從iPhone 5設備的NIB的UIImageView大小

有誰知道爲什麼?預先感謝您提供的任何幫助。

ViewController.m:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view, typically from a nib. 
    AppDelegate *appDelegate = [[UIApplication sharedApplication] delegate]; 
    device = appDelegate.deviceType; 
    NSLog(@"The device platform is: %@", device); 
    if ([[device substringToIndex:8] caseInsensitiveCompare: @"iPhone 5"] == NSOrderedSame) { 
     [background sizeThatFits:CGSizeMake(320, 504)]; 
    } 
    else { 
     [background sizeThatFits:CGSizeMake(320, 416)]; 
    } 
... 
//Note: 'background' is declared in `ViewController.h` as, `IBOutlet` `UIImageView` *background, and is linked to the image view in ViewController_iPhone.xib 
+1

我會阻止你從代碼中的硬編碼尺寸像'416'和'504'。如果你以後嵌入導航控制器會怎麼樣?或者一個標籤控制器?或兩者?或隱藏狀態欄?或者蘋果發佈4.5「設備?等等。您不應該根據視圖控制器的使用情況來更改視圖控制器的代碼(除了可能像iPad v iPhone這樣的激進產品)。 – Rob

+1

或者更好的是,設置'autosizing'掩碼,並且不要以編程方式更改框架。 – Rob

回答

4

的一點想法:

  1. 由於demosten和shabzco建議,我不會用一個設備名稱/描述,確定座標(如果不出意外,有什麼關於iPhone 6等);

  2. 如果你要設置frame編程,我建議設置基於background.frame屬性視圖控制器的視圖的bounds,而不是硬編碼的圖像視圖的大小。這樣,背景被調整到視圖控制器視圖的適當大小,不僅是設備而且不管設備如何,而且不管該視圖控制器是否在以後作爲另一個容器控制器的子視圖控制器嵌入等等。 (例如,如果你把你的視圖放在導航控制器和標籤欄控制器中,你自己的自定義容器控制器等等)。此外,不要對狀態欄或其他圖形元素的大小作出假設。讓iOS的身影所有這一切都爲你使用簡單:

    background.frame = self.view.bounds; 
    
  3. 或者更好的是,如果你已經添加了背景圖像視圖筆尖本身,設置自動調整大小面具,不改變frame編程在所有。如果你已經自動版式關閉,只需將您的圖像視圖的自動調整大小的屬性,像這樣:

    auto sizing

底線,如果可以的話,避免在代碼中顯式設備名稱引用,避免硬編碼座標。要在代碼中使用硬編碼維度,只會讓您的應用更加脆弱,容易受到新設備,iOS新版本,將視圖控制器嵌入其他容器控制器等問題的影響,並限制了代碼的重用機會。

+0

我喜歡你建議的@Rob,並且想讓它成爲公認的答案。但是,當我將高度編輯爲'504'並設置像上面爲UIImageView建議的自動調整屬性時,在模擬器/ iphone4上運行時,圖像仍然會被推到底部工具欄下。我怎樣才能確保它不會被推到工具欄或潛在的未來選項卡之下? – JRoss

+0

@JRoss可以隨時與我見面,所以我們可以對此置評:http://chat.stackoverflow.com/rooms/22021/chat-with-jross-re-nibs – Rob

2

這裏有一個更好的方式iPhone 5和之前大小的設備

if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) 
{ 
    CGSize result = [[UIScreen mainScreen] bounds].size; 
    if(result.height == 480) 
    { 
     [background sizeThatFits:CGSizeMake(320, 416)]; 
    } 
    if(result.height == 568) 
    { 
     [background sizeThatFits:CGSizeMake(320, 504)]; 
    } 
} 
+0

作爲有用的答案進行了升級。 @shabzco這可能是一種更好的方式,但它無助於調整圖像的大小......你知道爲什麼嗎? – JRoss

1

sizeThatFits不會改變大小之間的關係進行檢查。你應該修改background.frame。喜歡的東西:

background.frame = CGRectMake(background.frame.origin.x, background.frame.origin.y, 320, 416); 

background.frame = CGRectMake(background.frame.origin.x, background.frame.origin.y, 320, 504); 

另外,還要確保您的UIImageView沒有在尺寸檢查標籤靈活的寬度或高度,同時編輯NIB文件。

+0

謝謝@demonsten :) – JRoss