C# 如何将中间的子视图与Xamarin iOS Fluent布局对齐?

C# 如何将中间的子视图与Xamarin iOS Fluent布局对齐?,c#,xamarin,xamarin.ios,mvvmcross,cirrious.fluentlayout,C#,Xamarin,Xamarin.ios,Mvvmcross,Cirrious.fluentlayout,我的代码如下: var nameTextField = new UITextField(); var passwordTextField = new UITextField(); var loginButton = new UIButton(); //Bindings with MvvmCross... Add(nameTextField); Add(passwordTextField); Add(loginButton); View.SubviewsDoNotTranslateAutor

我的代码如下:

var nameTextField = new UITextField();
var passwordTextField = new UITextField();
var loginButton = new UIButton();

//Bindings with MvvmCross...

Add(nameTextField);
Add(passwordTextField);
Add(loginButton);

View.SubviewsDoNotTranslateAutoresizingMaskIntoConstraints();

View.AddConstraints(
    nameTextField.AtTopOf(View, 10),
    nameTextField.AtLeftOf(View, 10),
    nameTextField.AtRightOf(View, 10),
    passwordTextField.Below(nameTextField, 10),
    passwordTextField.WithSameLeft(nameTextField),
    passwordTextField.WithSameRight(nameTextField),
    loginButton.Below(passwordTextField, 30),
    loginButton.WithSameLeft(passwordTextField),
    loginButton.WithSameRight(passwordTextField)
);
使用“nameTextField.AtTopOf(视图,10),表单显示在顶部屏幕上。但是现在,我需要垂直对齐视图中的所有控件(名称、密码和按钮)

我该怎么做

我已经试着用所有控件的边距和use.WithCenterY(视图)。减号(值)求和高度,但我认为这不是最好的方法,尤其是当我有很多控件时


谢谢。

首先,创建一个子视图以添加所有表单控件:

var formView = new UIView();
formView.AddSubviews(nameTextField, passwordTextField, loginButton);
formView
视图中为这些元素创建约束:

formView.SubviewsDoNotTranslateAutoresizingMaskIntoConstraints();

formView.AddConstraints(
    nameTextField.AtTopOf(formView, 10),
    nameTextField.AtLeftOf(formView, 10),
    nameTextField.AtRightOf(formView, 10),
    passwordTextField.Below(nameTextField, 10),
    passwordTextField.WithSameLeft(nameTextField),
    passwordTextField.WithSameRight(nameTextField),
    loginButton.Below(passwordTextField, 30),
    loginButton.WithSameLeft(passwordTextField),
    loginButton.WithSameRight(passwordTextField)
);
在屏幕上创建对中心
formView
的约束:

View.SubviewsDoNotTranslateAutoresizingMaskIntoConstraints();

View.AddConstraints(
    formView.WidthOf(View),
    formView.WithSameCenterY(View);
    ...
);

我没有测试任何这段代码,因此在某些方面可能是错误的,但您知道了…

首先,创建一个子视图以添加所有表单控件:

var formView = new UIView();
formView.AddSubviews(nameTextField, passwordTextField, loginButton);
formView
视图中为这些元素创建约束:

formView.SubviewsDoNotTranslateAutoresizingMaskIntoConstraints();

formView.AddConstraints(
    nameTextField.AtTopOf(formView, 10),
    nameTextField.AtLeftOf(formView, 10),
    nameTextField.AtRightOf(formView, 10),
    passwordTextField.Below(nameTextField, 10),
    passwordTextField.WithSameLeft(nameTextField),
    passwordTextField.WithSameRight(nameTextField),
    loginButton.Below(passwordTextField, 30),
    loginButton.WithSameLeft(passwordTextField),
    loginButton.WithSameRight(passwordTextField)
);
在屏幕上创建对中心
formView
的约束:

View.SubviewsDoNotTranslateAutoresizingMaskIntoConstraints();

View.AddConstraints(
    formView.WidthOf(View),
    formView.WithSameCenterY(View);
    ...
);

我没有测试任何这段代码,因此在某些方面可能是错误的,但您会想到…

问题是formView的顶部与视图的中心对齐,因此子视图呈现在屏幕的中间/底部。我需要对齐formView的中心(与已添加的子视图对齐)使用视图中心。尝试
formView。使用视图中心(视图)
我成功地改变了约束顺序。First View.AddConstraints…和它们formView.AddConstraints…最重要的是为formView定义一个大于或等于所有子视图高度和边距之和的高度。formView中的红色背景色有助于进行一些测试。谢谢问题是formView的顶部与视图的中心对齐,因此子视图呈现在屏幕的中间/底部。我需要将formView的中心(已添加子视图)与视图的中心对齐。请尝试
formView。使用SameCentery(视图)
我成功地改变了约束顺序。First View.AddConstraints…和它们formView.AddConstraints…最重要的是为formView定义一个大于或等于所有子视图高度和边距之和的高度。formView中的红色背景色有助于进行一些测试。谢谢!