2014-01-25 47 views
2

我需要UIButton小號靈活地這樣定位在垂直列表:如何靈活地在表格中定位UIbuttons?

A 
B 
C 
D 

的問題是它需要靈活,當B丟失它應該看起來像這樣的:

A 
C 
D 

所以應該沒有空格,但UIButton s應該向上移動

現在我通過編程方式定位UIButton這樣,但是這隻在iOS7中可行,如果我打開Autolayout off

但是,這反過來又需要將所有其他元素 - 尤其是屏幕的底部 - 也以編程方式放置,這是我不想做的。

如何以這種方式定位UIButton s,而無需以編程方式以編程方式將所有其他元素定位在屏幕上。

在Android中有tablelayoutlinearLayout,它會自動處理!

編輯:

這都是一個很大的痛苦,但這是它是如何工作的:

  1. 放置所有的btns很好左對齊,下對方這樣你就可以很好地看到他們在IB 。在這個階段,垂直間距並不重要,因爲我們刪除了由IB創建的所有這些約束,並且以編程方式添加了我們稍後想要的垂直間距
  2. 確保現在只有您想要的約束以及由IB創建的沒有約束你不想要。
  3. 特別是要刪除所有你想要以編程方式重新定位的btns之間的垂直間距約束。通過點擊灰色彈出框中的「添加約束」,將您想要的約束添加到IB中。之後,不要再觸摸你的佈局 - 你可以輕鬆搞定!
  4. 使用此代碼重新定位現在A相對於C例如。不要忘了集B隱形
UIView *superview = self.view; 

NSMutableArray *mutableConstraintsArray =[[NSMutableArray alloc]init]; 
NSLayoutConstraint *constraint =  [NSLayoutConstraint constraintWithItem:A 
                    attribute:NSLayoutAttributeBottom 

                    relatedBy:NSLayoutRelationEqual toItem:C 

                    attribute:NSLayoutAttributeTop multiplier:1.0 constant:-20.0];//C is 20 points under A 
[mutableConstraintsArray addObject:constraint]; 


for (int i = 0; i<mutableConstraintsArray.count; i++) { 
    [superview addConstraint:mutableConstraintsArray[i]]; 
} 

我用mutableConstraintsArray在這裏,所以我可以在這個時候添加multuple限制!

很多努力恕我直言!

如果有更簡單的方法,請更正/改善!

非常感謝馬特指示我在正確的方向。

回答

1

現在我編程定位UIButtons編程這樣的,但是這是唯一可能在iOS7如果我把自動佈局關閉

這不是真的。您也可以編程方式使用自動佈局約束。假設被刪除的按鈕B對它上面的按鈕A有一個約束,對它下面的按鈕C有一個約束。當你刪除B時,在A和C之間建立一個約束(編程)並將該約束添加到它們的公共上海華。完成! C現在移動到位置,D移動到位,其餘的隨後。

+0

謝謝 - 請給出一個工作示例如何將這樣的約束添加到UIButton B和D,例如請... – user387184

+0

它可能有助於閱讀關於NSLayoutConstraint的文檔。或者[我的書](http://www.apeth.com/iOSBook/ch14.html#_autolayout)的這一部分... – matt

+0

此處還有一些代碼,其中我以編程方式創建了具有自動佈局約束的標籤:https: //github.com/mattneub/Programming-iOS-Book-Examples/blob/master/bk2ch07p362scrollViewInCode2/ch20p670scrollViewInCode2/ViewController.m – matt

0

嘗試做編程:

for(i=1 ; i<[no of buttons you want to create]; i++) 
{ 
     button =[UIButton buttonWithType:UIButtonTypeRoundedRect]; 
     button.frame  = CGRectMake(5 , y + 30, 82, 82); 
     button.Tag= i; 
     [self.view addSubView: button]; 
} 

現在一切都取決於你的輸入,你有多少按鈕在屏幕上wan't還有,關於框架,你可以操縱邏輯x和y座標方面調整正確的位置。也可以使用每個單一按鈕使用他們的標籤....

這將是很好,如果你把數組中沒有按鈕,然後比較我與該數組的數量。

我做到了這一點,工作正常。

+0

只需將x和y放在一起就行不通了 - 因爲您必須關閉Autolayout以及所有其他元素在3,5個設備上搞砸了,然後.. – user387184

+0

@ user387184真的!但我已經使用條件來檢查它是哪個設備,然後爲每個設備設置幀。很明顯,如果您關閉自動佈局,則需要分別爲每個設備設置視圖幀。像 如果(ITS_IPHONE4) {用於設備iPhone 4 幀 //代碼}如果(ITS_IPHONE5) {用於設備iPhone幀 //代碼5 } – Rana