gpt4 book ai didi

c# - 什么是 Xamarin.Forms 等效于 layoutSubviews?

转载 作者:行者123 更新时间:2023-12-01 20:05:52 25 4
gpt4 key购买 nike

我正在将大型 iOS 代码库移植到 Xamarin.Forms 应用程序。我们有很多自定义 View ,它们通过在 -layoutSubviews 中进行计算来执行它们的布局逻辑。 .如果我需要根据堆栈或网格布局重新解释这些计算,代码库太大,我无法及时移植。我真正想要的是一个直接的等价物,我可以将等价的 subview 添加到我们的 View 中而不必担心它们的去向,然后当 View 的边界发生变化时调用一个方法,我可以在其中设置 subview 的新边界。然后我可以直接移植我们现有的 iOS 代码。

Xamarin.Forms 中是否有一些等价的 -layoutSubviews ?

最佳答案

您可以从 Xamarin.Forms.Layout 派生来创建自己的布局。类(class)。

public class CustomLayout : Layout<View>
{
public CustomLayout ()
{

}
}

布局必须覆盖 LayoutChildren方法。此方法负责在屏幕上定位 child 。

可以使用 GetSizeRequest 测量 child 方法,它将返回所需的大小和 child 想要的最小大小。
protected override void LayoutChildren (double x, double y, double width, double height)
{
for (int i = 0; i < Children.Count; i++) {
var child = (View) Children[i];
// skip invisible children

if(!child.IsVisible)
continue;
var childSizeRequest = child.GetSizeRequest (double.PositiveInfinity, height);
var childWidth = childSizeRequest.Request.Width;
LayoutChildIntoBoundingRegion (child, new Rectangle (x, y, childWidth, height));
x += childWidth;
}
}

每当需要重新计算布局时,都会自动调用此方法。如果您的布局由硬编码或固定大小的元素组成,请将它们的大小硬编码到此算法中,而不是测量。 GetSizeRequest 调用是可以进行的一些最昂贵的调用,并且在其运行时不可预测,因为子树可能是任意复杂的。如果不需要动态调整大小,固定它们的大小是提高性能的好方法。

实现 OnSizeRequest当放置在其他布局中时,需要确保新布局的大小正确。在布局周期中,可能会多次调用此方法,具体取决于它上面的布局以及解析当前布局层次结构需要多少布局异常。
protected override SizeRequest OnSizeRequest (double widthConstraint, double heightConstraint)
{
var height = 0;
var minHeight = 0;
var width = 0;
var minWidth = 0;

for (int i = 0; i < Children.Count; i++) {
var child = (View) Children[i];
// skip invisible children

if(!child.IsVisible)
continue;
var childSizeRequest = child.GetSizeRequest (double.PositiveInfinity, height);
height = Math.Max (height, childSizeRequest.Minimum.Height);
minHeight = Math.Max (minHeight, childSizeRequest.Minimum.Height);
width += childSizeRequest.Request.Width;
minWidth += childSizeRequest.Minimum.Width;
}

return new SizeRequest (new Size (width, height), new Size (minWidth, minHeight));
}

您可以阅读有关如何创建自定义布局的完整教程 here .

关于c# - 什么是 Xamarin.Forms 等效于 layoutSubviews?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38830231/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com