MVVMCross FluentLayout等水平间距

时间:2017-03-01 12:15:03

标签: ios xamarin mvvmcross cirrious.fluentlayout

我正在使用MVVMCross中的Cirrious.FluentLayout创建一个TableCell来添加约束。
我已经向ContentView添加了四个图像,并且必须通过计算构造函数中的边距来手动将它们分开(水平)

var gap = (ContentView.Frame.Width - (imagesize * 3) - 40) /6;

然后我使用计算的差距作为约束

        _signalStrength.ToRightOf(_batteryLevel, gap),
        _childLockImage.ToRightOf(_signalStrength, gap),

目前这个工作正常,因为应用程序只在纵向模式下运行,但我担心如果我们启用横向模式,那么这将无效。

是否有更好的方法让这些图像在表格单元格中均匀分布?

2 个答案:

答案 0 :(得分:2)

我建议您在水平模式下use a UIStackView使用相等的间距分布。 UIStackView已经在iOS 9中添加,真正有助于解决这些问题,并且不需要大量的约束。

在你的情况下,有4个视图,水平排列等间距,代码看起来像:

var views = new UIView[] { view1, view2, view3, view4 };
var stackView = new UIStackView(views)
{
    Axis = UILayoutConstraintAxis.Horizontal,
    Distribution = UIStackViewDistribution.EqualSpacing
};

然后你只需限制你的stackView,子视图就会在里面进行布局。

答案 1 :(得分:1)

@Cheesebaron的UIStackView答案是一个非常好的方法。

但是,如果你关心iOS 7-8(UIStackView适用于9+),那么你可以做什么:

view.AddConstraints(
    i1.WithSameCenterX(view).WithMultiplier(1 / 4f),
    i2.WithSameCenterX(view).WithMultiplier(3 / 4f),
    i3.WithSameCenterX(view).WithMultiplier(5 / 4f),
    v4.WithSameCenterX(view).WithMultiplier(7 / 4f)
);

i1-i3是相同大小的图像,v4是不同大小的其他视图。无需人工计算。

以纵向模式工作: portrait

and landscape:

landscape

这个想法在这个精彩的答案中得到了解释:https://stackoverflow.com/a/30249550/883738

如果您的观看次数不同,可能并不完全符合您的要求:

not exactly what you need