Xamarin 相对布局

在这种情况下使用 ForceLayout

标签和按钮的大小根据其中的文本而变化。因此,当将子项添加到布局时,它们的大小在宽度和高度上都保持为 0。例如:

relativeLayout.Children.Add(label,
    Constraint.RelativeToParent(parent => label.Width));

上面的表达式将返回 0,因为此刻宽度为 0。为了解决这个问题,我们需要监听 SizeChanged 事件,当大小改变时,我们应该强制布局以重绘它。

label.SizeChanged += (s, e) => relativeLayout.ForceLayout();

对于像 BoxView 这样的视图,这是不必要的。因为我们可以在实例化时定义它们的大小。另外一点是,在我们将它们添加到布局时,我们可以将它们的宽度和高度定义为约束。例如:

relativeLayout.Children.Add(label,
    Constraint.Constant(0),
    Constraint.Constant(0),
    //Width constraint
    Constraint.Constant(30),
    //Height constraint
    Constraint.Constant(40));

这会将标签添加到 0,0 点。标签的宽度和高度将为 30 和 40.但是,如果文本太长,其中一些可能不会显示。如果你的标签具有或可能具有较高的高度,则可以使用 label 的 LineBreakMode 属性。哪个可以包装文本。 LineBreakMode 枚举中有很多选项。