我正在使用MVVMCross中的Cirrious.FluentLayout创建一个TableCell来添加约束。
我已经向ContentView添加了四个图像,并且必须通过计算构造函数中的边距来手动将它们分开(水平)
var gap = (ContentView.Frame.Width - (imagesize * 3) - 40) /6;
然后我使用计算的差距作为约束
_signalStrength.ToRightOf(_batteryLevel, gap),
_childLockImage.ToRightOf(_signalStrength, gap),
目前这个工作正常,因为应用程序只在纵向模式下运行,但我担心如果我们启用横向模式,那么这将无效。
是否有更好的方法让这些图像在表格单元格中均匀分布?
答案 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是不同大小的其他视图。无需人工计算。
and landscape:
这个想法在这个精彩的答案中得到了解释:https://stackoverflow.com/a/30249550/883738
如果您的观看次数不同,可能并不完全符合您的要求: