2016-04-02 34 views
1

我知道這個問題似乎是一個老派,但我不能找到一個很好的答案來,有件事:爲如何適應IOS不同的屏幕尺寸

邏輯屏幕分辨率的iPhone5,iPhone6和iPhone6 +:

iPhone5 320 x 568 
iPhone6 375 x 667 
iPhone6+ 414 x 736 

假設我有在屏幕的中心的正方形UI元素,並有三種方式在不同的裝置,以限制它的寬度(&高度):

  1. width是恆定的
  2. width/screen.width是恆定的
  3. screen.width - width是恆定的

這三種不同的方式有三種不同的外觀制約的結果:

Picture 1: 3 different appearances

我認爲制約的第二個方法(即中間一列在Picture 1)是從設計師的角度來看最自然的,但從程序員的角度來看它是最不自然的。我需要檢查設備類型和計算尺寸,並針對不同的設備使用不同的圖像(在這種情況下,自動佈局無法幫助)

第一種方式似乎很自然地實現,但實際上很糟糕,特別是在處理文本字體大小。

由於三個不同設備中的三個UI元素與簡單的縮放因子不匹配,因此第三個還需要判斷哪個圖像以編程方式使用。

有什麼辦法可以輕鬆實現第二種約束方式嗎?

+0

UI元素需要適當的缺點traints - 不要硬編碼任何屏幕值。 '1)'添加水平和垂直中心約束(這將保持居中)。 '2)'給廣場增加一個寬度=高度限制(這將使其成爲一個正方形)。 '3)'將superview約束的比例添加到正方形(這會根據屏幕大小給出寬度和高度,沒有任何硬編碼屏幕值,並且適用於所有設備)。 –

回答

0

如果您正在使用故事板,則可以輕鬆計算出您想要的第二種方式。您可以使用超級視圖給出成比例的寬度。 正如您在image 中看到的那樣,您可以爲您的視圖提供倍數。 或者你可以在代碼中創建一個寬度約束,如:

@IBOutlet weak var widthConstraint: NSLayoutConstraint! 

,你可以在你的代碼更新您的約束。

+0

謝謝你的快速回復。故事板對圖像選擇沒有幫助,假設'multiplier = 0.5',那麼我需要iphone5的'160x160px'圖像和iphone6的'187.5x187.5px'圖像 –

+0

當您添加尺寸爲'@x ','@ 2x'和'@ 3x'您不需要添加其他任何不同大小的圖像。 – ridvankucuk

+0

我能做什麼字體大小? –

1

您只需在容器中水平放置並在容器約束中垂直放置以查看ViewController中的哪個位於中心,如果需要,則給出View的高度和寬度本身。

0

使用宏的

的#define IS_IPAD(UI_USER_INTERFACE_IDIOM()== UIUserInterfaceIdiomPad)

的#define IS_IPHONE(UI_USER_INTERFACE_IDIOM()== UIUserInterfaceIdiomPhone)

的#define IS_RETINA([UIScreen mainScreen ] scale => 2.0)

#define SCREEN_WIDTH([[UIScreen mainScreen] bounds] .size。寬度)

的#define SCREEN_HEIGHT([[UIScreen mainScreen]界限] .size.height)

的#define SCREEN_MAX_LENGTH(MAX(SCREEN_WIDTH,SCREEN_HEIGHT))

的#define SCREEN_MIN_LENGTH(MIN(SCREEN_WIDTH,SCREEN_HEIGHT ))

的#define IS_IPHONE_4_OR_LESS(IS_IPHONE & & SCREEN_MAX_LENGTH < 568.0)

的#define IS_IPHONE_5(IS_IPHONE & & SCREEN_MAX_LENGTH == 568.0)

的#define IS_IPHONE_6(IS_IPHONE & & SCREEN_MAX_LENGTH == 667.0)

的#define IS_IPHONE_6P(IS_IPHONE & & SCREEN_MAX_LENGTH == 736.0)

如果(IS_PHONE_5){// TODO}

if(IS_PHONE_6){// TODO}