ios - Xamarin iOS 按钮多行文本更改图像对齐方式
问题描述
在编写应用程序时,我注意到 Xamarin iOS 按钮默认不支持文本换行。为了克服这个问题,我创建了一个自定义渲染器,如下所示:
class iOSButton : ButtonRenderer
{
protected override void OnElementChanged(ElementChangedEventArgs<Button> e)
{
base.OnElementChanged(e);
if (Control != null)
{
Control.TitleLabel.LineBreakMode = UILineBreakMode.WordWrap;
}
}
}
这工作正常,直到您将图像添加到按钮。我在文本上方放置了一个图像并将其居中。但是,现在文本仅在几个字符后环绕,并且似乎新行上的任何字符都将图像移动到其居中位置的右侧(尽管文本位于图像下方)。
本质上,多行文本会移动图像对齐方式,并且文本会在填充可用空间之前开始环绕。
我已经尝试在图像和文本属性上使用 UIEdgeInsets(如此处所述:在 Xamarin IOS 中显示带有文本和图像的按钮),但我无法让它工作。
任何想法如何保持图像对齐并防止过早的文本换行?这可能是 Xamarin 表单中的错误吗?
编辑: 我尝试了@llill 的答案 - 不幸的是它没有帮助,只是移动了对齐但没有修复它。
按钮应显示“测试文本”,箭头居中在文本上方,文本也居中。
此按钮的 Xaml 是:
<Button TextColor="White"
Text="Test Text"
Grid.Row="0"
Grid.RowSpan="2"
Grid.Column="2"
BackgroundColor="{StaticResource ButtonColour}"
BorderColor="{Binding ButtonSelection[2], Converter={Services:ByteToBorderColourConverter}}"
BorderWidth="{StaticResource ButtonBorderWidth}"
BorderRadius="{StaticResource ButtonCornerRadius}"
HorizontalOptions="FillAndExpand"
VerticalOptions="FillAndExpand"
ContentLayout="Top"
ImageSource ="left_arrow_back_button.png"
Pressed="Test_Pressed"
Released="Test_Released"
/>
解决方案
我使用自定义渲染器来重写按钮。在Xamarin iOS中,我尝试使用UIEdgeInsets来实现Button的文字换行操作,图片在文字上方。下面是我在 Xamarin.IOS 中的代码:
[assembly: ExportRenderer(typeof(Button), typeof(MyButtonren))]
namespace mkll.iOS
{
public class MyButtonren:ButtonRenderer
{
protected override void OnElementChanged(ElementChangedEventArgs<Button> e)
{
base.OnElementChanged(e);
Control.SetTitle("adasdsadagfcghgvhjvhvhvhvvsdsdszd", UIControlState.Normal);
Control.SetImage(UIImage.FromFile("didian.png"), UIControlState.Normal);
Control.ImageEdgeInsets = new UIEdgeInsets(-50 , 60, Control.TitleLabel.Frame.Size.Height , 0);
Control.TitleEdgeInsets = new UIEdgeInsets(Control.ImageView.Frame.Size.Height / 2, 0, -Control.ImageView.Frame.Size.Height / 2, Control.ImageView.Frame.Size.Width / 2);
Control.TitleLabel.LineBreakMode = UIKit.UILineBreakMode.WordWrap;
}
}
}
下面是运行截图:
推荐阅读
- mysql - SQL Group 通过返回错误结果
- sql - 使用公式的攻击性能
- java - 在 H2 中切换同一事务中的两个唯一字段时违反唯一约束
- javascript - 函数问题,角度打字稿,匹配 2 个数组中的 id 值以从其中一个数组中获取索引
- javascript - ExpressJS 函数无法返回
- docker - 《如何用 api 连接 Docker 容器》
- python - 我可以删除正则表达式中除了这一件事之外的所有内容:“co-”。不知道如何处理破折号
- java - 我想用破折号对角线打印一个完整的 X 正方形
- javascript - 单击时如何获取href属性并在div中使用它?
- java - 错误原因:SpringBoot 2.0 应用程序中 src/main/resources/config/env/dev2 下的文件的 java.io.FileNotFoundException