2015-04-30 93 views
1

我有我的模型中的標籤列表。我想將它們作爲標籤添加到tagView UIView中作爲子視圖。constraintsWithVisualFormat可以與動態生成的視圖一起使用嗎?

NSMutableArray *list = [NSMutableArray new]; 
    for (long i=0; i<_tagView.subviews.count; i++) { 
     UILabel *tagLabel = _tagView.subviews[i]; 
     [tagLabel setTranslatesAutoresizingMaskIntoConstraints:NO]; 
     [list addObject:tagLabel]; 
    } 

    // Create the views and metrics dictionaries 
    NSDictionary *metrics = @{@"height":@25.0}; 
    NSDictionary *views = NSDictionaryOfVariableBindings(list[0], list[1], list[2]); 

// This is experimental as I assume there are three subviews in that. 

    [_tagView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"|-[list[0]]-[list[1]]-[list[2]]-|" options:NSLayoutFormatAlignAllTop | NSLayoutFormatAlignAllBottom metrics:metrics views:views]]; 

這是可行的還是必須採取不同的方向?

我忘了補充錯誤消息我得到:

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Unable to parse constraint format: 
list is not a key in the views dictionary. 
|-[list[0]]-[list[1]]-[list[2]]-| 
     ^' 

UPDATE:

鍵似乎是罰款。 enter image description here

+0

好主意。我剛剛添加了屏幕截圖。似乎沒關係,不是嗎?但仍然沒有工作。 – Houman

+0

對不起,我刪除了我的評論,因爲我對它進行了測試,並且按照您的要求顯示。但是,我認爲這個關鍵是由於額外的括號導致了錯誤。不要使用NSDictionaryOfVariableBindings,而是將密鑰添加到可循環字典中,如label1,label2等。 – rdelmar

回答

1

您應該創建自己的字典,這樣就可以添加沒有額外括號的名稱。像「list [0]」這樣的名稱似乎令解析器感到困惑。

NSMutableDictionary *views = [NSMutableDictionary new]; 
NSMutableArray *list = [NSMutableArray new]; 
     for (long i=0; i<_tagView.subviews.count; i++) { 
      UILabel *tagLabel = _tagView.subviews[i]; 
      [tagLabel setTranslatesAutoresizingMaskIntoConstraints:NO]; 
      [list addObject:tagLabel]; 
      [views setObject:tagLabel forKey:[NSString stringWithFormat:@"label%ld", i]]; 
     } 

     NSDictionary *metrics = @{@"height":@25.0}; 

     [_tagView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"|-[label1]-[label2]-[label3]-|" options:NSLayoutFormatAlignAllTop | NSLayoutFormatAlignAllBottom metrics:metrics views:views]]; 
+0

謝謝,沒有更多的例外,我也瞭解它。現在我需要找出爲什麼這些標籤不會出現在我的屏幕上。我想規則是不正確的。 – Houman

+0

@Houman您可能至少需要對其中一個標籤進行垂直約束。從你的問題中看不出tagView是什麼。它是否有限制(所以它的大小不是零)?您也正在創建度量字典,但沒有對它做任何事情。 – rdelmar

相關問題