Xamarin Forms: редактор действует странно на iOS при вставке текста RTL по сравнению с меткой - PullRequest
0 голосов
/ 23 марта 2020

В Xamarin Forms я создал Editor и Label, чтобы проверить, как текст RTL отображается в обоих. Если я скопирую текст RTL и вставлю его в Editor, он будет выглядеть странно, тогда как Label выглядит правильно.

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:d="http://xamarin.com/schemas/2014/forms/design"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
             mc:Ignorable="d"
             x:Class="App3.MainPage">

    <StackLayout Orientation="Vertical" Padding="20,60" Spacing="20" BackgroundColor="Beige">
        <Editor x:Name="Editor" HorizontalOptions="FillAndExpand" VerticalOptions="FillAndExpand" Completed="Editor_OnCompleted"/>

        <Label x:Name="Label" LineBreakMode="WordWrap"/>
    </StackLayout>
</ContentPage>

Это код:

using System;
using System.ComponentModel;
using Xamarin.Forms;

namespace App3
{
    [DesignTimeVisible(false)]
    public partial class MainPage : ContentPage
    {
        public MainPage()
        {
            InitializeComponent();
        }

        private void Editor_OnCompleted(object sender, EventArgs e)
        {
            Label.Text = Editor.Text;
        }
    }
}

Скопированный текст находится на https://r12a.github.io/scripts/tutorial/summaries/arabic под образцом (арабский c).

Это вывод:

enter image description here

Когда я использую Twitter на iOS, UITextView и UILabel ведут себя одинаково. Как изменить поведение Editor, чтобы вставляемый текст совпадал с текстом в Label? Мне нравится, как Twitter справляется с этим лучше. Кроме того, на Android у меня нет этой проблемы.

Ответы [ 2 ]

0 голосов
/ 03 апреля 2020

Мы проверили, и эта проблема возникает только в проекте Xamarin.forms. Хорошо работает в проекте Xamarin. iOS.

Обнаружен обходной путь, который позволяет использовать Собственные представления в XAML для загрузки этого текста.

Хотя существует ограничение , что невозможно назвать собственное представление с помощью атрибута x:Name, возможно получить экземпляр собственного представления, объявленный в файл XAML из файла с выделенным кодом в Shared Access Project .

Поэтому, если вы хотите что-то делать в коде с собственным UITextView, вам придется перейти к проекту общего ресурса вместо использования. NET Стандартного проекта для общего кода. Это может или не может быть реальным решением для вас.

Кстати, проблема была поднята в Github, и вы можете следить за ней, чтобы получить самую свежую информацию.

0 голосов
/ 24 марта 2020

Я не знаю, о чем говорится в тексте, но явно устанавливаю FlowDirection в каждом элементе.

Я бы просто добавил его и проверил

<Editor x:Name="Editor" 
        HorizontalOptions="FillAndExpand" 
        VerticalOptions="FillAndExpand" 
        FlowDirection="RightToLeft" 
        Completed="Editor_OnCompleted"/>

<Label x:Name="Label" 
       FlowDirection="RightToLeft" 
       LineBreakMode="WordWrap"/>
...