东西是压倒我的约束
问题描述:
我有一个视图,我从一个笔尖加载,添加到超级视图,然后添加一些约束。然而,这个界限是错误的,当我用“Debug View Hierarchy”查看视图时,它显示了一些其他的约束,而不是我的。我无法弄清楚他们来自哪里,为什么他们压倒我设定的那些。东西是压倒我的约束
Xcode中显示了这个:
他们变灰的约束是我自己的,无论是从笔尖或在运行时添加。前四名是神秘的。
的代码是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);
是我加入它是主窗口中的视图。我不知道这件事是否重要。
(我想是因为它应该从关屏动画开始与负顶部,但由于这个问题是不工作)
哪里有额外的限制来自何处,以及如何做我摆脱/重写他们?
答
向视图手动添加约束时,通常需要移除由自动识别掩码创建的约束。
要做到这一点,只需添加:
notificationView.TranslatesAutoresizingMaskIntoConstraints = false;
后
window.AddSubview(notificationView);
+0
在装载作品后也这样做。我想我以前被这个东西咬过了......事情是文档说你不必为从一个笔尖加载的视图做到这一点。我只记得他们错了。 – Uncommon
您可以启用malloc的堆栈日志记录在您的方案选项(诊断选项卡)“所有的分配和*史”。当你在视图调试器(或任何其他元素)中选择一个约束时,检查员将向你显示它的创建回溯。请记住将其关闭,因为它可能会影响目标的性能。 – wolfrevo