2013-08-21 115 views
2

我開發了一個iPhone5的應用程序,我啓用了使用自動佈局。我已經將每個按鈕的垂直空間40用於其另一個按鈕。當我運行的iPhone4s這個應用程序的最後一個按鈕不appeared.I.How降低垂直間距是在4s.enter圖像描述這裏運行使用自動佈局,而4屏幕應用程序運行在3.5屏幕

This is how it looks in iphone 4s

+2

想出一組更好的不依賴於固定數字的約束。 –

+0

您必須正確設置每個按鈕的「約束」。 – Exploring

+0

@DavidRönnqvist同意。或者,更準確地說,您需要不依賴於像素/點數量的約束。例如,使用固定的「乘數」(例如,超視圖的中心Y的百分比)的centerY約束條件很好,因爲無論屏幕高度如何,該約束都可以工作,但是您希望避免使用固定的「常量」值。 – Rob

回答

2

時,您需要使用的各個之間的間隔視圖按鈕。這樣你就可以使用一個可變大小的空間,這取決於屏幕的高度。然後

事情是這樣的......

@"V:|[_spacer1][_button1][_spacer2(==_spacer1)][_button2][_spacer3(==spacer1)][_button3]...[_lastSpacer(==spacer1)]|" 

這將佈局都與他們之間的間隔相等的按鈕。但是之間的空間會根據屏幕的高度而改變。

+0

感謝回覆。有沒有辦法通過編碼來減少垂直空間限制 – chandu

+1

爲什麼?這樣可以工作,而且更容易,因爲你不需要計算任何東西。例如,數字40從哪裏來?如果你不得不使用計算器或做數學,那麼你使用AutoLayout是錯誤的。 – Fogmeister

+0

N.B.您可以使間隔視圖清晰,以便它們不可見。你只是用它們來佈局。 – Fogmeister

2

如果你不想在代碼中做到這一點,你必須在按鈕之間添加一些隱藏的「間隔」視圖,其中「等高」約束和沒有明確的高度。它們將根據需要擴展/縮小,以正確放置按鈕。

enter image description here

0

雖然你可以使用clear /隱藏UIView對象作爲間隔,正如其他人所描述的,這是沒有必要的。您還可以通過編程方式創建約束條件,均勻分配這些約束條件,併合理使用提供給constraintWithItem方法的multiplier值。例如,如果您有一組UIButton對象,則可以將它們垂直隔開:

[buttons enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { 
    [self.view addConstraint:[NSLayoutConstraint constraintWithItem:obj 
                  attribute:NSLayoutAttributeCenterY 
                  relatedBy:NSLayoutRelationEqual 
                  toItem:self.view 
                  attribute:NSLayoutAttributeCenterY 
                 multiplier:2.0 * (idx + 1.0)/([buttons count] + 1.0) 
                  constant:0.0]]; 
}]; 
相關問題