2017-09-13 68 views
1

我有一個視圖,我從一個筆尖加載,添加到超級視圖,然後添加一些約束。然而,這個界限是錯誤的,當我用「Debug View Hierarchy」查看視圖時,它顯示了一些其他的約束,而不是我的。我無法弄清楚他們來自哪裏,爲什麼他們壓倒我設定的那些。東西是壓倒我的約束

Xcode中顯示了這個:

enter image description here

他們變灰的約束是我自己的,無論是從筆尖或在運行時添加。前四名是神祕的。

的代碼是C#,但它是非常簡單的:

var notificationView = UINib.FromName("NotificationView", null) 
          .Instantiate(null, null).OfType<NotificationView>().FirstOrDefault(); 
var constraints = new[] 
{ 
    notificationView.WidthAnchor.ConstraintEqualTo(window.WidthAnchor, 0.5f, 0), 
    notificationView.CenterXAnchor.ConstraintEqualTo(window.CenterXAnchor), 
    notificationView.HeightAnchor.ConstraintEqualTo(OverlayHeight), 
    notificationView.TopAnchor.ConstraintEqualTo(window.TopAnchor, -OverlayHeight), 
}; 

window.AddSubview(notificationView); 
NSLayoutConstraint.ActivateConstraints(constraints); 

是我加入它是主窗口中的視圖。我不知道這件事是否重要。

(我想是因爲它應該從關屏動畫開始與負頂部,但由於這個問題是不工作)

哪裏有額外的限制來自何處,以及如何做我擺脫/重寫他們?

+0

您可以啓用malloc的堆棧日誌記錄在您的方案選項(診斷選項卡)「所有的分配和自由史」。當你在視圖調試器(或任何其他元素)中選擇一個約束時,檢查員將向你顯示它的創建回溯。請記住將其關閉,因爲它可能會影響目標的性能。 – wolfrevo

回答

1

向視圖手動添加約束時,通常需要移除由自動識別掩碼創建的約束。

要做到這一點,只需添加:

notificationView.TranslatesAutoresizingMaskIntoConstraints = false; 

window.AddSubview(notificationView); 
+0

在裝載作品後也這樣做。我想我以前被這個東西咬過了......事情是文檔說你不必爲從一個筆尖加載的視圖做到這一點。我只記得他們錯了。 – Uncommon