2015-04-21 38 views
1

這裏是一個example在github集視圖編程在superview的中心。「|」之間的差異和Visualview語言中的[superview]?

constraints = NSLayoutConstraint.constraintsWithVisualFormat(
     "H:[superview]-(<=1)-[label]", 
     options: NSLayoutFormatOptions.AlignAllCenterY, 
     metrics: nil, 
     views: ["superview":view, "label":label]) 

我的問題是,雖然我用「|」替換了「[superview]」,就像蘋果文檔解釋一樣,我猜他們是平等的。其實他們不是, ,它不會工作。

我的代碼。

constraints = NSLayoutConstraint.constraintsWithVisualFormat(
        "H:|-(<=1)-[imageview]", 
        options: NSLayoutFormatOptions.AlignAllCenterY, 
        metrics: nil, 
        views: ["imageview":imageview]) 

有什麼不對,或VFL的錯誤? 蘋果文檔here

回答

4

原始代碼使用技巧(或黑客)。

AlignAllCenterY並不意味着在容器中居中。這些選項用於指定子視圖的相對位置 - 例如,如果在同一個容器中有3個標籤,則可以使它們全部頂部對齊或居中對齊 - 而不是容器(由|隱式指定)。

訣竅是,當你明確指定superview時,框架沒有意識到它增加了約束。

到中心在其容器的視圖正確的方法是以下內容:

let centerX = NSLayoutConstraint(item: label, 
          attribute: .CenterX, 
          relatedBy: .Equal, 
           toItem: view, 
          attribute: .CenterX, 
          multiplier: 1.0,   
          constant: 0.0); 
view.addConstraint(centerX); 

let centerY = NSLayoutConstraint(item: label, 
          attribute: .centerY, 
          relatedBy: .Equal, 
           toItem: view, 
          attribute: .centerY, 
          multiplier: 1.0,   
          constant: 0.0); 
view.addConstraint(centerY); 
+0

對不起。仍不清楚明白,「|」之間有什麼不同?和超級觀點?我可以使用constraintsWithVisualFormat來獲得這個需求。NSLayoutConstraint init()有點複雜嗎? –

+1

你的意思是「|」不會被NSLayoutFormatOptions作爲「All」的子項佔用,但[superview]會被視爲「AlignAllCenterY」的成員? –

+1

@ Albert.Qing正是。 – Sulthan