Layout 如何防止堆栈布局表单中的标签被截断

Layout 如何防止堆栈布局表单中的标签被截断,layout,xamarin.ios,xamarin.android,xamarin.forms,Layout,Xamarin.ios,Xamarin.android,Xamarin.forms,我有两个紧挨着的标签。第一个相当长,如果必要的话应该被截断。第二个应该完全显示-无论发生什么 这是我的代码: MainPage=新内容页{ 内容=新的堆栈布局{ 方向=堆叠方向。水平, 垂直选项=LayoutOptions.CenterAndExpand, BackgroundColor=颜色。橙色, 填充=10, 儿童={ 新标签{ Text=“生命、宇宙和一切的答案”, 水平选项=布局选项。开始, LineBreakMode=LineBreakMode.TailTruncation, 背景颜

我有两个紧挨着的标签。第一个相当长,如果必要的话应该被截断。第二个应该完全显示-无论发生什么

这是我的代码:

MainPage=新内容页{
内容=新的堆栈布局{
方向=堆叠方向。水平,
垂直选项=LayoutOptions.CenterAndExpand,
BackgroundColor=颜色。橙色,
填充=10,
儿童={
新标签{
Text=“生命、宇宙和一切的答案”,
水平选项=布局选项。开始,
LineBreakMode=LineBreakMode.TailTruncation,
背景颜色=颜色。黄色,
},
新标签{
Text=“42”,
HorizontalOptions=LayoutOptions.EndAndExpand,
LineBreakMode=LineBreakMode.NoWrap,
背景颜色=颜色。黄色,
},
},
},
};
这就是我得到的:

我的问题:如何防止“42”被切断

对当前结果的解释:我想我知道,为什么第二个标签太小了。两个标签的大小在第一个文本被截断之前协商。所以两个标签都需要缩小一点,尽管第一个标签可以更好地处理它

想法1:我尝试了相对布局(而不是堆栈布局)。然而,这是一个相当复杂的方法,我在iOS和Android上得到了不同的结果。所以我希望有一个更简单的解决方案

想法2:我是否应该覆盖布局或大小协商方法之一?也许“42”布局可以强制获得所需的宽度

想法3:也许我们可以为iOS和Android定制标签渲染器,按照预期处理大小协商


更新

“42”只是一个例子。在我的最后一个应用程序中,这将动态变化,可以是不同长度的字符串。因此,在不知道渲染字符串的宽度的情况下,设置
MinimumWidthRequest
没有帮助

如何防止“42”被切断

您可以在“42”
标签中设置
MinimumWidthRequest
,以防止其被切断

有关
最小宽度请求的详细信息,请参阅

代码示例:

MainPage=新内容页{
内容=新的堆栈布局{
方向=堆叠方向。水平,
垂直选项=LayoutOptions.CenterAndExpand,
BackgroundColor=颜色。橙色,
填充=10,
儿童={
新标签{
Text=“生命的答案宇宙与万物生命的答案宇宙与万物”,
水平选项=布局选项。开始,
LineBreakMode=LineBreakMode.TailTruncation,
背景颜色=颜色。黄色,
},
新标签{
最小宽度请求=50,
Text=“42”,
HorizontalOptions=LayoutOptions.EndAndExpand,
LineBreakMode=LineBreakMode.NoWrap,
背景颜色=颜色。黄色,
},
},
},
};
结果如下:


在这里,您可以使用
网格
而不是
堆栈布局
。这会解决你的问题

网格:

var grid=new grid();
添加(新的行定义{Height=GridLength.Auto});
Add(newColumnDefinition{Width=newGridLength(1,GridUnitType.Star)});
添加(新的ColumnDefinition{Width=GridLength.Auto});

在Xamarin.Forms 3.4或更高版本中,只需尝试Label的“MaxLines”属性即可设置行限制。而且,它是可绑定的属性

谢谢,迈克!但是,我知道
MinimumWidthRequest
属性。很抱歉在我的问题中没有说清楚,但“42”只是一个非常简单的示例,在我的应用程序中将是不同长度的动态值。我会相应地更新我的问题。@Falko只需保持
MinimumWidthRequest
大于标签宽度大小,将
MinimumWidthRequest
设置为足够大,如500。或者客户标签将
MinimumWidthRequest
设置为大于我不熟悉的ios标签宽度大小。但在android端,您可以在
OnMeasure
函数中获得大小。我认为ios应该是类似的。哇!这是只是令人惊叹的!绝对违反直觉的是,一个任意大的数字的最小宽度要求恰好可以缩放标签。如果左侧文本较短且未被截断,则黄色框甚至不会比文本“42”大。我认为你的50的值与这个例子很吻合。但我会简单地使用一个大常量,比如1000或1e6,它在Android和iOS上都能完美工作。谢谢你的回答。然而,用网格替换StackLayout相当复杂,而且取决于周围的应用程序架构,不容易实现。这与我的想法1相似,可能会带来新的困难。肯定不行!!XF 4.8