Horizo​​ntalTextAlignment - iOS(不按预期工作)

时间:2018-02-14 08:03:00

标签: xamarin xamarin.forms

我在iOS上使用HorizontalTextAlignment="Center"时遇到问题,因为它在Android上运行正常。问题是它没有按照预期将句子正确地包装到下一行。

这是我的结果:

enter image description here

代码:

<Grid HorizontalOptions="CenterAndExpand" VerticalOptions="Center" Grid.Row="3">
            <Grid.RowDefinitions>
                <RowDefinition Height="*"/>
            </Grid.RowDefinitions>
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="*"/>
            </Grid.ColumnDefinitions>
                <Label Text="{Binding lblItem}"
                       TextColor="#BCBCBC"
                       FontFamily="Calibri"
                       Grid.Row="0"
                       Grid.Column="0"
                       HorizontalTextAlignment="Center"
                       VerticalTextAlignment="Center"
                       HorizontalOptions="Center">
                    <Label.Margin>
                        <OnIdiom x:TypeArguments="Thickness">
                            <OnIdiom.Tablet>
                                <OnPlatform x:TypeArguments="Thickness" iOS="0,5,0,0" Android="0,5,0,0" WinPhone="0,0,0,0"/>
                            </OnIdiom.Tablet>
                            <OnIdiom.Phone>
                                <OnPlatform x:TypeArguments="Thickness" iOS="0,0,0,0" Android="0,0,0,0" WinPhone="0,0,0,0"/>
                            </OnIdiom.Phone>
                        </OnIdiom>
                    </Label.Margin>
                </Label>

</Grid>

如何正确使用HorizontalTextAlignment="Center"在布局中正确包装?

编辑:当包装在vm后面绑定的文本时似乎有问题,因为现在我不知道为什么,但是,我正在努力寻找解决方法。如果我找到了解决方案,请保持此帖更新。

2 个答案:

答案 0 :(得分:3)

为了换行文字,您必须将Label.LineBreakMode属性设置为WordWrap(请参阅herehere)。

<Grid HorizontalOptions="CenterAndExpand" VerticalOptions="Center" Grid.Row="3">
    <!-- ... -->
    <Label Text="{Binding lblItem}"
        LineBreakMode="WordWrap"
        HorizontalTextAlignment="Center"
        VerticalTextAlignment="Center"
        HorizontalOptions="Center">
        <!-- ... -->
    </Label>
</Grid>

这应该会正确破坏文本。

也许您必须将HorizontalOptions设置为Fill而不是Center

答案 1 :(得分:0)

我已经解决了这个问题,如果你绑定了Label的文本,看起来像标签Horizontal/Vertical.TextAlignment在iOS上有一个错误。为了解决这个问题,我特意在iOS上为这个标签创建了一个CustomRenderer:

protected override void OnElementChanged(ElementChangedEventArgs<Label> e)
{
        base.OnElementChanged(e);

        if (e.NewElement == null) return;

        var ctrl = (YourLabel)Element;

        ctrl.HorizontalTextAlignment = TextAlignment.Center;
        ctrl.VerticalTextAlignment = TextAlignment.Center;
}