使用Xamarin Effect删除Xamarin.iOS中TextEntry上的圆角

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用Xamarin Effect删除Xamarin.iOS中TextEntry上的圆角相关的知识,希望对你有一定的参考价值。

使用带有TextEntry的Xamarin.Forms应用程序。它在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与Lucas Zhang所假设的CustomRenderer一样的样子 - MSFT:

enter image description here

存在rectengular形状的边界,但不幸的是圆角也是如此。顺便说一句,我测试了CustomRenderer和我上面的Effect。没有不同。我认为使用Effect是更好的选择(参见Why Use an Effect over a Custom Renderer? )。

答案

它将删除圆角

请参阅链接https://docs.microsoft.com/en-us/dotnet/api/uikit.uitextborderstyle?view=xamarin-ios-sdk-12

 uiTextField. UITextBorderStyle = UITextBorderStyle.None

另一答案

你可以使用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>

以上是关于使用Xamarin Effect删除Xamarin.iOS中TextEntry上的圆角的主要内容,如果未能解决你的问题,请参考以下文章

在 Xamarin.Forms Shell 中隐藏 tabbedPage 的标题

如何停止 Xamarin.UITest 删除测试之间的数据?

删除 Picker XAMARIN 中的行

从 xamarin.mac / xamarin.forms 的编辑菜单中删除表情符号和符号

使用 xamarin 表单删除 Android 上的顶部栏

Xamarin/SQLite/C# - 如何使用菜单项删除从列表视图和 SQLite 表中删除一行