xamarin Ios 将 UIView 添加到 ContainerView

xamarin Ios add UIView to ContainerView

我需要帮助对齐 ContainerView 中的子视图。我试图添加约束但它搞砸了一切所以我尝试了 FluentLayout (https://github.com/FluentLayout/Cirrious.FluentLayout)

我的代码如下所示:

public override void ViewDidLoad()
        {

            SFCalendar calendar = new SFCalendar();
            containerView.AddSubview(calendar);

            containerView.AtBottomOf(this.View);
            containerView.AtTopOf(this.View);
            containerView.WithSameWidth(this.View);

            calendar.AtBottomOf(containerView);
            calendar.AtTopOf(containerView);
            calendar.WithSameWidth(containerView);
        }

但是最后我的日历被截断了一点,我这里做错了什么?

在使用自动布局之前,您应该禁用 TranslatesAutoresizingMaskIntoConstraints。所以将这两个控件 属性 设置为 False 就可以了,而且你应该更正你的用法:

containerView.TranslatesAutoresizingMaskIntoConstraints = false;

SFCalendar calendar = new SFCalendar();
containerView.AddSubview(calendar);

calendar.TranslatesAutoresizingMaskIntoConstraints = false;

View.AddConstraints(containerView.AtBottomOf(this.View),
containerView.AtTopOf(this.View),
containerView.WithSameWidth(this.View));


containerView.AddConstraints(calendar.AtBottomOf(containerView),
calendar.AtTopOf(containerView),
calendar.WithSameWidth(containerView));

但我建议您使用本机约束来执行此操作,而且您似乎想使此 containerView 全屏显示。添加其前导、尾随、顶部、底部会更好:

SFCalendar calendar = new SFCalendar();
containerView.AddSubview(calendar);

containerView.TranslatesAutoresizingMaskIntoConstraints = false;
containerView.LeadingAnchor.ConstraintEqualTo(View.LeadingAnchor).Active = true;
containerView.TopAnchor.ConstraintEqualTo(TopLayoutGuide.GetBottomAnchor()).Active = true;
containerView.TrailingAnchor.ConstraintEqualTo(View.TrailingAnchor).Active = true;
containerView.BottomAnchor.ConstraintEqualTo(BottomLayoutGuide.GetTopAnchor()).Active = true;

calendar.TranslatesAutoresizingMaskIntoConstraints = false;
calendar.LeadingAnchor.ConstraintEqualTo(containerView.LeadingAnchor).Active = true;
calendar.TopAnchor.ConstraintEqualTo(containerView.TopAnchor).Active = true;
calendar.TrailingAnchor.ConstraintEqualTo(containerView.TrailingAnchor).Active = true;
calendar.BottomAnchor.ConstraintEqualTo(containerView.BottomAnchor).Active = true;

我们使用 NSLayoutConstraint 创建了一个样本。在这里你可以改变布局大小,但是我们不能在这里访问fluentlayout。请从以下 link

中查找示例