2015-01-21 39 views
4

我正在切換到自動佈局,並且希望將視圖相對於設備的高度進行定位。我應該如何設置約束來滿足這種條件。在iOS中定位取決於設備高度的視圖

我有很好的佈局爲iPhone 5,但對於iPhone 6Plus我想移動 「紅」 到 「灰色」 的位置:

iPhone 5s layout iPhone 6Plus layout

所有我目前的約束條件:

Constrains Xcode

+0

給你的用戶名/密碼視圖w.r.t的底部間距。條款和條件標籤。這將解決問題。 – 2015-01-21 11:22:55

+0

「佈局與」什麼? – Fishman 2015-01-21 11:25:21

+0

@Fishman你可以在這裏找到解決方案http://stackoverflow.com/a/37325714/2477632 – 2016-05-19 14:55:04

回答

0

正如我看到你想把你的形式放在視圖的中心。所以我認爲最好的解決方案是將你的表單元素放在另一個透明視圖上,並添加到這個視圖的centerX對齊約束和centerY對齊約束中。

,您可以檢查另一種方式here

+0

不,我不想集中它(它稍微靠近頂部)。這將是最簡單的方法。但是,假設我想將紅色矩形始終放在屏幕高度的1/3處? – Fishman 2015-01-21 11:24:16

+0

另一個好方法是創建高度等於屏幕高度1/3的空視圖。然後設置其寬度等於父視圖寬度。設置爲此視圖縱橫比約束後。並將您的觀點放在空白視圖下方。按照它的約束,空視圖應該調整到1/3屏幕高度,如果你的窗體將在空視圖的下方,那麼應該在正確的位置。添加指向我的答案的教程鏈接 – 2015-01-21 11:29:47

+0

如何在子視圖和其容器之間添加約束'縱橫比'? – Fishman 2015-01-21 11:35:50

1

一個想法可能是把用戶名,密碼和登錄的項目上有clearBackground一個UIView,然後創建該視圖的約束和它的父,創造一個出口吧。然後,您可以檢測您在代碼中使用的手機,並在willLayoutSubviews中以編程方式修改約束。

if ((int)[[UIScreen mainScreen] bounds].size.height == 736) 
{ 
    // This is iPhone 6+ screen 
    myConstraint.constant = 150; 

} else if ((int)[[UIScreen mainScreen] bounds].size.height == 568) { 
    // This is iPhone 5s screen 
    frameRateLabelHeightConstraint.constant = 100; 
} 

將會有一個更好的方式來做到這一點的自動佈局毫無疑問,但我覺得這是一個有點混亂,所以我已經在過去使用此方法。

+0

你什麼時候做這樣的更新?無論使用什麼設備,viewDidLoad:view.height始終爲568。 viewWillLayoutSubviews中有這樣的信息,但約束的改變不影響視圖。 – Fishman 2015-01-21 16:36:01

+0

它肯定會影響視圖,如果你改變一個約束的常量值,它會相應地改變視圖。無論如何,在我的經驗。雖然我喜歡Pranav的回答,但請設置用戶名框的垂直約束,使其具有比其他約束更低的優先級。看看他提供的代碼,這是一個很好的方法。 – Md1079 2015-01-21 16:54:26

1

這是一個樣本項目上傳@One Drive。這裏是各種版本的iPhone模擬器的示例輸出... iPhone 4/4SiPhone 5/5SiPhone 6iPhone6+

相關問題