自动布局不受限制

时间:2014-03-18 07:52:31

标签: ios ipad constraints autolayout xamarin-studio

我正在尝试布置彩色样本(只有UIView并设置了背景颜色),使其位于容器视图的左侧。它的容器的左侧,顶部和底部具有固定宽度(10)和固定距离(8)。这是它的样子:

enter image description here

色板是灰色的。其他内容当然会出现在右边,但我还没有达到目的。

以下是我应用于色板的约束:

enter image description here

然而,在运行时我得到了不可满足的约束:

Unable to simultaneously satisfy constraints.
    Probably at least one of the constraints in the following list is one you don't want. Try this: (1) look at each constraint and try to figure out which you don't expect; (2) find the code that added the unwanted constraint or constraints and fix it. (Note: If you're seeing NSAutoresizingMaskLayoutConstraints that you don't understand, refer to the documentation for the UIView property translatesAutoresizingMaskIntoConstraints) 
(
    "<NSLayoutConstraint:0x15e53fe0 V:[UIView:0x15e57250]-(8)-|   (Names: '|':LogEntryView:0x15e57740 )>",
    "<NSLayoutConstraint:0x15e54010 V:|-(8)-[UIView:0x15e57250]   (Names: '|':LogEntryView:0x15e57740 )>",
    "<NSAutoresizingMaskLayoutConstraint:0x15e528c0 h=-&- v=-&- LogEntryView:0x15e57740.height == LogEntryView:0x15e57150.height>",
    "<NSAutoresizingMaskLayoutConstraint:0x15e54f80 h=--& v=--& V:[LogEntryView:0x15e57150(0)]>"
)

做了一些阅读后,我怀疑NSAutoresizingMaskLayoutConstraint是问题所在。但是,我无法弄清楚为什么要添加它们。我已检查过每个视图,以确保translatesAutoresizingMaskIntoConstraintsNO,确实如此。我使用了Interface Builder,无论如何都应该自动完成。

如果我删除了两个垂直约束,则不会显示错误。如果我只删除了一个垂直约束(顶部或底部,无关紧要),则不会显示错误。

谁能告诉我这里发生了什么?

更新:我意识到我的LogEntryView代码中包含以下内容(我使用的是Xamarin):

    public LogEntryView()
    {
        var arr = NSBundle.MainBundle.LoadNib("LogEntryView", this, null);
        var v = (UIView)Runtime.GetNSObject(arr.ValueAt(0));
        v.Frame = new RectangleF(0, 0, Frame.Width, Frame.Height);
        this.AddSubview(v);
    }

从NIB加载后直接检查v.TranslatesAutoresizingMaskIntoConstraints表明它是true。我不明白为什么,因为我认为NIB会将其存储为错误,如界面构建器中所示。我将此代码更改为:

    public LogEntryView()
    {
        this.TranslatesAutoresizingMaskIntoConstraints = false;
        var arr = NSBundle.MainBundle.LoadNib("LogEntryView", this, null);
        var v = (UIView)Runtime.GetNSObject(arr.ValueAt(0));
        v.TranslatesAutoresizingMaskIntoConstraints = false;
        this.AddSubview(v);
    }

现在错误没有出现,但我有一个不同的问题:样片现在根本没有出现。有什么想法吗?

0 个答案:

没有答案