我有两个标签彼此相邻.第一个很长,如果需要应该被截断.第二个应该完全显示 - 无论如何.
这是我的代码:
MainPage = new ContentPage {
Content = new StackLayout {
Orientation = StackOrientation.Horizontal,
VerticalOptions = LayoutOptions.CenterAndExpand,
BackgroundColor = Color.Orange,
Padding = 10,
Children = {
new Label {
Text = "The answer to life the universe and everything",
HorizontalOptions = LayoutOptions.Start,
LineBreakMode = LineBreakMode.TailTruncation,
BackgroundColor = Color.Yellow,
},
new Label {
Text = "42",
HorizontalOptions = LayoutOptions.EndAndExpand,
LineBreakMode = LineBreakMode.NoWrap,
BackgroundColor = Color.Yellow,
},
},
},
};
这就是我得到的:
我的问题:如何防止"42"被切断?
当前结果的解释:我想我知道,为什么第二个标签太小了.在截断第一个文本之前协商两个标签的大小.因此,两个标签都需要缩小一点,尽管第一个标签可以更好地处理它.
想法1:我尝试了相对布局(而不是堆栈布局).但是,这是一个相当复杂的方法,我在iOS和Android上获得了不同的结果.所以我希望能有一个更简单的解决方案.
想法2:我应该覆盖其中一种布局或大小协商方法吗?也许"42"布局可以强制获得所需的宽度.
想法3:也许我们可以为iOS和Android提供自定义标签渲染器,按照预期处理尺寸协商.
更新
"42"只是一个例子.在我的最终应用程序中,这将动态更改,并且可以是不同长度的字符串.因此,MinimumWidthRequest
如果不知道渲染字符串的宽度,设置就无济于事.
如何防止"42"被切断?
您可以MinimumWidthRequest
在"42"中设置Label
以防止它被切断.
有关详细信息,MinimumWidthRequest
请参阅文档的备注部分.
代码示例:
MainPage = new ContentPage {
Content = new StackLayout {
Orientation = StackOrientation.Horizontal,
VerticalOptions = LayoutOptions.CenterAndExpand,
BackgroundColor = Color.Orange,
Padding = 10,
Children = {
new Label {
Text = "The answer to life the universe and everything The answer to life the universe and everything",
HorizontalOptions = LayoutOptions.Start,
LineBreakMode = LineBreakMode.TailTruncation,
BackgroundColor = Color.Yellow,
},
new Label {
MinimumWidthRequest = 50,
Text = "42",
HorizontalOptions = LayoutOptions.EndAndExpand,
LineBreakMode = LineBreakMode.NoWrap,
BackgroundColor = Color.Yellow,
},
},
},
};
结果如下: