2016-06-09 46 views
0

enter image description hereenter image description here我想知道是否有辦法從子類訪問約束。我有一個自定義的視圖。我不確定是否可以訪問我已經在UI中設置的約束,所以我嘗試從子類本身創建約束。子類中的快速約束條件

class PerformanceView: UIView { 
    func initialize() { 
     let heightConstraint = NSLayoutConstraint(item: self, attribute: .Height, relatedBy: .Equal, toItem: superview, attribute: .Height, multiplier: 0.47, constant: 0); 
     superview.addConstraint(heightConstraint) 
    } 
} 

上述代碼不完整。只是顯示我正在嘗試做什麼。所以有兩個問題。

1)我可以從子類訪問UI上的約束嗎? 2)如果不是,我如何在子視圖中創建一個高度約束,該高度是超視圖高度的一半。

而且我確實有PerformanceView作爲視圖的類,因爲您可以看到它們都在左側顯示「性能視圖」。其中4個。

+0

只需添加一個可選的(如果你想暗示解開)'NSLayoutConstraint'財產,有這個'initialize'方法更新它,而不是使其成爲一個局部變量。順便說一句,我可能會爲這個方法選擇一個不同的名稱,因爲這會引起與從NSObject繼承的'initialize'類方法的混淆。 – Rob

回答

0

確保您添加您的自定義類到您的UIView在你的故事板

enter image description here

課下鍵入您的自定義類 - PerformanceView

創建連接變量從你的故事板保持約束

@IBOutlet weak var heightConstraint:NSLayoutConstraint? 

然後右鍵單擊並拖動連接

enter image description here

+0

通過子類。我的意思是一個UIView。不是UIViewController。 – KotaBear233

+0

其相同的過程 –

+0

請看我添加的圖像。它不會讓我添加約束到UIView – KotaBear233

1

如果我正確理解你的問題,答案是肯定的,有一種方法。您只需使用助理編輯器將插口拖到您的PerformanceView中即可。

enter image description here

作爲輔助手段 - 您可以通過使用.constant修改約束代碼。目前不支持修改優先級。

heightConstraint.constant = 230.0 //or any other value 

爲了拖動插座,您必須確保在故事板編輯器中正確識別了您的PerformanceView。因此請在左欄中選擇您的PerformanceView。然後在右欄中高亮顯示的字段中輸入「PerformanceView」,如下所示,然後按回車鍵。現在你應該很好去。

enter image description here

+0

通過子類。我的意思是一個UIView。不是UIViewController。 – KotaBear233

+0

就像盧克說:] - 這在任何情況下都有效。你正在處理一個常規出路。 – caxix

+0

看看我添加的圖像。 – KotaBear233

0

如果你正在尋找從IB添加到@IBOutlet子視圖UIView,它會出現的控制從控制-dragging下到源代碼協助編輯標準伎倆沒有按」工作。

有時IB會對網點感到困惑,但幸運的是,還有其他方法可以添加網點,而這些其他機制看起來可以正常工作。例如,您可以手動將@IBOutlet代碼添加到您的PerformanceView

class PerformanceView: UIView { 

    @IBOutlet weak var heightConstraint: NSLayoutConstraint! 

} 

現在你可以在左邊距從空連接點拖到旁邊@IBOutlet到約束:

enter image description here

或者,或者,控制 - 單擊文檔大綱中的PerformanceView,然後從彈出窗口中列出的出口拖至約束:

enter image description here