Xamarin iOS 故事板,子视图半宽然后是父视图。看法

Xamarin iOS Storyboard, child view half width then parent. view

我是 iOS UI 开发的新手。我陷入了以下问题。

我正在尝试将父视图宽度的一半分配给 2 个子视图。 (见图)。我不能将乘数设置为小于零。红色和绿色子视图的宽度应相等,宽度应为父视图的一半。

我正在使用 visual studio 进行开发。

您应该能够将乘数设置为 1:2,因为它适用于比率。

我觉得这是 Visual Studio 中 iOS 设计器的一个错误,因为乘数是一个浮点数。来自文档 here:

Multiplier: The value of attribute 2 is multiplied by this floating point number. In this case, the multiplier is 1.0.

在 Xamarin Studio 中,iOS Designer a ratio is accepted, Also 1/2 0.5:

在Xcode中:

它甚至被添加到 xib/storyboard 的源代码中,如下所示:

<constraint id="9" firstItem="3" firstAttribute="width" secondItem="8bC-Xf-vdC" secondAttribute="width" multiplier="1:2"/>

因此,您可以编辑 .xib 或 .storyboard 文件,但这并不理想。

您可以设置乘数的替代方法:

红景

  • LeadingSpace 到 superview.leadingspace

  • TrailingSpace 到 superview.CenterX

绿景

  • LeadingSpace 到 superview.CenterX

  • TrailingSpace 到 superview.trailingspace

这与将宽度设置为父视图宽度大小的一半相同。

TBH Visual studio 和 Xamarin studio 的 iOS 设计器在添加复杂约束方面与 Xcode 相比不是很好(这并不复杂,但仍然失败)。如果可以的话,我建议尝试在 Xcode 中对其进行编辑。

更新

如果您想以编程方式添加它们,请在 ViewDidLoad 中添加:

public override void ViewDidLoad()
{
    base.ViewDidLoad();

    greenView.TranslatesAutoresizingMaskIntoConstraints = false;
    redView.TranslatesAutoresizingMaskIntoConstraints = false;

    View.AddConstraints(new NSLayoutConstraint[]{
        NSLayoutConstraint.Create(redView, NSLayoutAttribute.Leading, NSLayoutRelation.Equal, View, NSLayoutAttribute.Leading, 1, 0),
        NSLayoutConstraint.Create(redView, NSLayoutAttribute.Trailing, NSLayoutRelation.Equal, View, NSLayoutAttribute.CenterX, 1, 0),
        NSLayoutConstraint.Create(redView, NSLayoutAttribute.CenterX, NSLayoutRelation.Equal, View, NSLayoutAttribute.CenterX, 1, 0),

        NSLayoutConstraint.Create(greenView, NSLayoutAttribute.Leading, NSLayoutRelation.Equal, View, NSLayoutAttribute.CenterX, 1, 0),
        NSLayoutConstraint.Create(greenView, NSLayoutAttribute.Trailing, NSLayoutRelation.Equal, View, NSLayoutAttribute.Trailing, 1, 0),
        NSLayoutConstraint.Create(greenView, NSLayoutAttribute.Top, NSLayoutRelation.Equal, redView, NSLayoutAttribute.Top, 1, 0),
    });
}

它会生成这样的视图: