2017-01-21 85 views

回答

1

發生這種情況,因爲當展開一個可選值Inspectable正在觸發你的hasBottomLine屬性被設置,因此didSet屬性觀察者被稱爲之前您的主視圖被加載。

我要去猜測,你lineHeightConstraint可能是定義爲隱式展開可選的,是這樣的:

@IBOutlet weak var lineHeightConstraint: NSLayoutConstraint! 

你必須在使用前解開可選,例如:

lineHeightConstraint?.constant = hasBottomLine ? 3 : 0 

在加載視圖後,您可能仍然需要設置此約束,因此您可能需要檢查可選項是否包含零,如果設置了標記,並稍後在您的viewDidLoad方法中執行此行。 (或者你可以叫它不管你的viewDidLoad)


更新的答案,但有額外的信息,這個代碼在子類的UIView而不是UIViewController中。

您可以在UIView的layoutSubviews方法中更新您的viewDidLoad方法中的約束常量,而不是更新約束常量。例如:

override func layoutSubviews() { 
    super.layoutSubviews() 
    lineHeightConstraint?.constant = hasBottomLine ? 3 : 0 
} 
+0

刪除了錯誤,但仍未加載視圖。 –

+0

你的意思是'視圖仍然沒有加載'。 - 你的viewDidLoad方法沒有被調用?或者你試圖設置的約束沒有被設置?如果約束沒有被設置,你還需要在你的viewDidLoad方法中設置它。 –

+0

此代碼來自HeaderView,它是一些其他視圖的一部分。鏈接到這個標題的視圖不會被加載。所以這個應用程序只是掛在那一點。 –

相關問題