2013-02-24 126 views
1

我現在已經用了很多時間來計算 - 自動佈局以及如何使用它,但還沒有找到如何解決這個問題的答案。在3.5英寸和4英寸顯示器上均勻佈置UIButtons

我的問題是,我想對齊例如5在iPhone 5和之前的顯示器上均勻地垂直放置UIButtons,但是有沒有辦法用Interface Builder來完成,還是應該用代碼來完成。當我希望按鈕之間的垂直距離與屏幕分辨率(3.5「和4」顯示)平均。

我已經嘗試在按鈕之間添加垂直約束,但如果選擇了4「顯示,這隻會在佈局的頂部或底部添加一個間隙。

我當然錯過了一些簡單的東西,但無法弄清楚。

+1

這可能只是幫助你做到這一點的方法之一http://stackoverflow.com/questions/13287047/naming-convention-for-iphone-5-images/13287481#13287481 – Popeye 2013-02-24 18:26:05

+0

@Popeye以什麼方式做到這一點回答地址如何根據當前屏幕大小正確地佈置一組按鈕? – rmaddy 2013-02-24 18:30:44

+1

@rmaddy這就是爲什麼我沒有把它作爲答案,因爲它只是在那裏的一半。本來希望他們能夠通過那裏自己來解決其他問題。但如果你想讓我爲你詳細說明。該鏈接提供瞭如何根據您可以獲得的屏幕大小,而不是代碼中您希望按鈕在屏幕上的佈局。我不是自動佈局的粉絲,因爲它從來不像你想要的那樣工作,所以我通常會建議爲每個人單獨進行佈局,直到它正常工作。 – Popeye 2013-02-24 18:34:59

回答

1

我得到這個工作的唯一方法是在邊緣和按鈕之間放置標籤(沒有標題,因此它們是不可見的),以便按鈕和標籤佔用所有垂直空間屏幕。按鈕具有固有尺寸,但標籤不包含,因此它們會展開或收縮以正確填充空間。

-(void)viewDidLoad { 
    [super viewDidLoad]; 

    NSMutableDictionary *viewsDict = [NSMutableDictionary dictionary]; 
    NSArray *titles = @[@"Button 1",@"Button 2",@"Button 3",@"Button 4",@"Button 5"]; 
    for (int i=1; i<6; i++) { 
     UIButton *b = [UIButton buttonWithType:1]; 
     [b setTitle:titles[i-1] forState:UIControlStateNormal]; 
     [b setTranslatesAutoresizingMaskIntoConstraints:NO]; 
     [viewsDict setObject:b forKey:[NSString stringWithFormat:@"b%d",i]]; 
    } 

    for (int i=1; i<7; i++) { // labels for spacing 
     UILabel *l = [[UILabel alloc ]init]; 
     [l setTranslatesAutoresizingMaskIntoConstraints:NO]; 
     [viewsDict setObject:l forKey:[NSString stringWithFormat:@"l%d",i]]; 
    } 

    for (id obj in viewsDict.allKeys) 
     [self.view addSubview:viewsDict[obj]]; 

    NSArray *constraints = [NSLayoutConstraint constraintsWithVisualFormat:@"V:|[l1][b1][l2(==l1)][b2][l3(==l1)][b3][l4(==l1)][b4][l5(==l1)][b5][l6(==l1)]|" 
                    options:NSLayoutFormatAlignAllLeading 
                    metrics:nil 
                    views:viewsDict]; 


    NSArray *constraints2 = [NSLayoutConstraint constraintsWithVisualFormat:@"|-100-[b1]" 
                    options:NSLayoutFormatAlignAllLeading 
                    metrics:nil 
                    views:viewsDict]; 


    [self.view addConstraints:constraints]; 
    [self.view addConstraints:constraints2]; 
} 

這將所有按鈕從左邊緣對齊100個點,按鈕之間的間距相等。這將調整屏幕大小以及旋轉。

+0

任何想法這可能會動態完成?就像你不知道你會展示哪個按鈕一樣?說,如果一些條件,使得只有按鈕1,3,5應該是可見的... – topwik 2013-06-25 22:33:57

相關問題