2013-07-10 55 views
3

我有四個標籤,其中一個在前一個下方堆疊,但其內容視圖的頂部與其基線對齊,而不是相互之間的垂直間距。自動佈局VFL:將水平約束中的所有尾部對齊

我這樣

[contentView addConstraint:[NSLayoutConstraint constraintWithItem:topFirstLabel_ 
                 attribute:NSLayoutAttributeBaseline 
                 relatedBy:NSLayoutRelationEqual 
                  toItem:contentView 
                 attribute:NSLayoutAttributeTop 
                 multiplier:1.0f 
                 constant:20.0f]]; 

[contentView addConstraint:[NSLayoutConstraint constraintWithItem:topSecondLabel_ 
                 attribute:NSLayoutAttributeBaseline 
                 relatedBy:NSLayoutRelationEqual 
                  toItem:contentView 
                 attribute:NSLayoutAttributeTop 
                 multiplier:1.0f 
                 constant:47.0f]]; 

[contentView addConstraint:[NSLayoutConstraint constraintWithItem:topThirdLabel_ 
                 attribute:NSLayoutAttributeBaseline 
                 relatedBy:NSLayoutRelationEqual 
                  toItem:contentView 
                 attribute:NSLayoutAttributeTop 
                 multiplier:1.0f 
                 constant:70.0f]]; 

[contentView addConstraint:[NSLayoutConstraint constraintWithItem:topFourthLabel_ 
                 attribute:NSLayoutAttributeBaseline 
                 relatedBy:NSLayoutRelationEqual 
                  toItem:contentView 
                 attribute:NSLayoutAttributeTop 
                 multiplier:1.0f 
                 constant:87.0f]]; 

做到這一點的代碼現在,我希望所有的標籤,通過與它的父後間隔排列。

我可以用唯一的VFL字符串來做到嗎?這樣的事情,雖然這個例子會崩潰的應用程序:

NSDictionary *views = NSDictionaryOfVariableBindings(contentView, topFirstLabel_, topSecondLabel_, topThirdLabel_, topFourthLabel_); 
NSDictionary *metrics = @{ @"bigMargin" : @12 }; 

[contentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:[topFirstLabel_][topSecondLabel_][topThirdLabel_][topFourthLabel_]-bigMargin-|" 
                    options:NSLayoutFormatAlignAllTrailing 
                    metrics:metrics 
                     views:views]]; 
+0

我不認爲你能做到這一點 - 你必須讓格式字符串中的所有標籤對齊它們,但是不能設置其他的間距,因爲你已經完成了其他方法。爲什麼不讓標籤在垂直方向上彼此間隔(而不是內容視圖),那麼您可以使用VFL來執行該間距以及對齊所有後邊緣? – rdelmar

+0

@rdelmar我不能這樣做,我必須將每個單元格從其超級頂部邊緣到基線的固定空間對齊。這裏沒有什麼可做的:P感謝您的迴應。 – emenegro

回答

2

library可能會幫助你。它使用垂直線性佈局概念,並且可以根據需要添加填充。

1

我不認爲你可以在一個調用中做到這一點。

你或許可以做這樣的事情:

for (NSString* viewName in views.allKeys) 
{ 
    [contentView addConstraints: [NSLayoutConstraint constraintsWithVisualFormat: [NSString stringWithFormat: @"H:[%@]-bigMargin-|", viewName], options:NSLayoutFormatAlignAllTrailing metrics:metrics views:views]; 
}