Наличие приложения Xamarin.Forms с TextEntry. На iOS это выглядит так:

enter image description here

Я пытаюсь убрать закругленные углы. Поэтому я добавил следующий эффект в проект iOS:

[assembly: ResolutionGroupName("Effects")]
[assembly: ExportEffect(typeof(EntryWithClearButtonEffect), "EntryWithClearButtonEffect")]
namespace C4S.MobileApp.iOS.Effects
{
    public class EntryWithClearButtonEffect : PlatformEffect
    {

        protected override void OnAttached()
        {
            ConfigureControl();
        }

        protected override void OnDetached()
        {
        }

        private void ConfigureControl()
        {
           var uiTextField = ((UITextField)Control);

           //Add iOS specific "clear button" to TextEntry
           uiTextField.ClearButtonMode = UITextFieldViewMode.WhileEditing;

           //Excpect to remove rounded corners
           uiTextField.Layer.CornerRadius = 0;
        }
    }
}

И используйте это в общем проекте:

<Entry x:Name="SearchEntry" VerticalOptions="End" Placeholder="Suchen..." ReturnType="Done" IsTextPredictionEnabled="False"
               Focused="VisualElement_OnFocused"  Completed="Entry_OnCompleted" TextChanged="Entry_OnCompleted">
      <Entry.Effects>
             <customControls:EntryWithClearButton />
      </Entry.Effects>
</Entry>

К сожалению, закругленные углы все еще присутствуют. Также попытался добавить следующий код в ConfigureControl ():

        uiTextField.ClipsToBounds = true;
        uiTextField.Layer.MasksToBounds = true;

Тоже никакого эффекта. Установка для UITextField.BorderStyle значения None удаляет всю границу. Это не то, что я хочу.

Изменить:

Вот так выглядит TextEntry с предполагаемым CustomRenderer от Лукаса Чжана - MSFT:

enter image description here

Границы прямоугольной формы присутствуют, но, к сожалению, закругленные углы тоже есть. Кстати, я тестировал с CustomRenderer и моими выше Effect. Нет разницы. Я думаю, что использование Effect является лучшим вариантом здесь (см. Зачем использовать эффект поверх пользовательского рендерера? ) .

0
pschlz 30 Апр 2019 в 17:16

3 ответа

Лучший ответ

Наконец-то нашли обходной путь!

Удалить границу. Это также удалит отступы, поэтому добавьте их слева и справа. (источник из stackoverflow )

private void ConfigureControl()
{
   var uiTextField = ((UITextField)Control);

   //Add padding left and right (UITextBorderStyle.None removes padding)
   uiTextField.LeftView = new UIView(new CGRect(0, 0, 8, this.Control.Frame.Height));
   uiTextField.RightView = new UIView(new CGRect(0, 0, 8, this.Control.Frame.Height));
   uiTextField.LeftViewMode = UITextFieldViewMode.Always;
   uiTextField.RightViewMode = UITextFieldViewMode.Always;

   //remove border
   uiTextField.BorderStyle = UITextBorderStyle.None;
 }

Добавьте BoxView над текстовой записью.

<BoxView HeightRequest="0.4" Color="#A9ABAC" />    
<Entry x:Name="SearchEntry" VerticalOptions="End" Placeholder="Suchen..." ReturnType="Done" IsTextPredictionEnabled="False"
               Focused="VisualElement_OnFocused"  Completed="Entry_OnCompleted" TextChanged="Entry_OnCompleted">
      <Entry.Effects>
             <customControls:EntryWithClearButton />
      </Entry.Effects>
</Entry>

Результат:

enter image description here

0
pschlz 5 Авг 2019 в 08:35

Это уберет закругленные углы

См. Ссылку https: // docs.microsoft.com/en-us/dotnet/api/uikit.uitextborderstyle?view=xamarin-ios-sdk-12

 uiTextField. UITextBorderStyle = UITextBorderStyle.None

1
Ashish Rana 30 Апр 2019 в 14:32

Вы можете использовать CustomRenderer

в проекте iOS

using Foundation;
using UIKit;

using App7;
using App7.iOS;

using Xamarin.Forms;
using Xamarin.Forms.Platform.iOS;

[assembly: ExportRenderer(typeof(Entry), typeof(MyLabelRenderer))]
namespace App7.iOS
{
    public class MyLabelRenderer:EntryRenderer
    {
        protected override void OnElementChanged(ElementChangedEventArgs<Entry> e)
        {
            base.OnElementChanged(e);

            if(Control!=null)
            {
                Control.Layer.MasksToBounds = true;
                Control.Layer.CornerRadius = 0;
                Control.Layer.BorderColor = UIColor.Black.CGColor;
                Control.Layer.BorderWidth = 1;
            }

        }

    }
}
<Entry x:Name="SearchEntry" VerticalOptions="End" Placeholder="Suchen..." ReturnType="Done" IsTextPredictionEnabled="False"
               Focused="VisualElement_OnFocused"  Completed="Entry_OnCompleted" TextChanged="Entry_OnCompleted">

</Entry>
0
Lucas Zhang - MSFT 1 Май 2019 в 01:21