使用xamarin.ios c#以编程方式添加嵌套堆栈视图

时间:2018-06-14 08:45:31

标签: xamarin.ios mvvmcross uistackview

我正在使用xamarin和mvvmcross为android和ios创建一个应用程序。 在ios应用程序中,我想添加具有嵌套水平堆栈视图的外部垂直stackview。基本上我只想创建一个基本的人物细节屏幕,左边是标签,右边是文本字段,它将放在一个水平的堆栈视图中,像这样会有许多水平叠加视图嵌套在外部垂直叠加视图中。

我在互联网上寻找这样的例子,但似乎大部分的例子都很快,但我几乎无法在c#中找到一些。

有人可以帮忙。

谢谢, 桑托什

1 个答案:

答案 0 :(得分:1)

UIStackView利用自动布局和大小类的强大功能来水平或垂直管理一组子视图,这些子视图动态响应iOS设备的方向和屏幕大小。您可以通过此documentation了解相关信息。

在您的情况下,我们可以构造一个垂直堆栈来放置几个水平堆栈:

UIStackView verticalStack = new UIStackView();
View.AddSubview(verticalStack);
verticalStack.Axis = UILayoutConstraintAxis.Vertical;
verticalStack.TranslatesAutoresizingMaskIntoConstraints = false;

// Use auto layout to embed this super vertical stack in the View. Also there's no need to set the height constraint, vertical stack will automatically adjust that depending on its content
verticalStack.LeadingAnchor.ConstraintEqualTo(View.LeadingAnchor).Active = true;
verticalStack.TopAnchor.ConstraintEqualTo(TopLayoutGuide.GetBottomAnchor()).Active = true;
verticalStack.TrailingAnchor.ConstraintEqualTo(View.TrailingAnchor).Active = true;           

for (int i=0; i<10; i++)
{
    // Here try to put some horizontal stack with Label on left and textfield on right in the father stack.
    UIStackView horizontalStack = new UIStackView();
    horizontalStack.Distribution = UIStackViewDistribution.EqualSpacing;
    horizontalStack.Axis = UILayoutConstraintAxis.Horizontal;
    // UIStackView should use AddArrangedSubview() to add subviews.
    verticalStack.AddArrangedSubview(horizontalStack);
    UILabel textLabel = new UILabel();
    textLabel.Text = "text";
    UITextField textField = new UITextField();
    textField.Placeholder = "enter text";
    horizontalStack.AddArrangedSubview(textLabel);
    horizontalStack.AddArrangedSubview(textField);
}

但是如果每个水平堆栈的子视图几乎都是相同的样式和布局。为什么不尝试使用UITableView?您只需设置单个单元格的内容和布局,然后在tableView中使用它。此外,该控件可以重复使用和滚动。