gpt4 book ai didi

c# - Xamarin表单iOS CustomRenderer条目PlaceHolder和按钮文本填充底部

转载 作者:行者123 更新时间:2023-12-03 10:41:51 26 4
gpt4 key购买 nike

Screen of the issue

这是我的第一篇文章,不要恨我。这种情况很难解释,但我会尽力弄清楚。我有一个xamarin形式的项目,并且正在使用iOS版本,我将字体从基本字体更改为Nexa。这导致更改“g”的大小并产生了我无法解决的问题。我为条目提供了一个自定义渲染器,但是我在网上找不到任何方法可以纠正底部填充。我已经在页面的xaml,自定义渲染器和样式上尝试了许多更改,而没有解决问题https://github.com/xamarin/Xamarin.Forms/issues/6141。我也读过这篇文章,但对我没有帮助。在这里,我编写代码来澄清这种情况:

样式:

<!-- Default Entries -->
<Style TargetType="cr:BorderlessEntry">
<Setter Property="HeightRequest" Value="45"/>
<Setter Property="TextColor" Value="Black"/>
<Setter Property="PlaceholderColor" Value="Gray"/>
<Setter Property="FontFamily" Value="{StaticResource NormalFont}"/>
</Style>
<!-- Default Frame -->
<Style x:Key="FrameEntry" TargetType="Frame">
<Setter Property="BorderColor" Value="{StaticResource LightBlue}"/>
<Setter Property="CornerRadius" Value="25"/>
<Setter Property="Padding" Value="10,3,10,3"/>
<Setter Property="Margin" Value="0"/>
</Style>

Xaml页面:
<Frame Style="{StaticResource FrameEntry}">
<cr:BorderlessEntry Placeholder="{x:Static res:AppResources.PLACE}" Text="{Binding Place}"/>
</Frame>

CS自定义渲染器:
   public class BorderlessEntryRenderer : EntryRenderer
{
protected override void OnElementPropertyChanged(object sender, PropertyChangedEventArgs e)
{
base.OnElementPropertyChanged(sender, e);

if (Control == null)
return;

Control.Layer.BorderWidth = 0;
Control.BorderStyle = UITextBorderStyle.None;
//Control.VerticalAlignment = UIControlContentVerticalAlignment.Fill;
//Control.LeftView = new UIView(new CGRect(0, 0, 0, 0));
//Control.LeftViewMode = UITextFieldViewMode.Always;
//Control.RightView = new UIView(new CGRect(0, 0, 0, 0));
//Control.RightViewMode = UITextFieldViewMode.Always;
}
}

显然,如果我尝试在条目内写入g,则不会被切掉!

Gggggggg here

我还发现按钮内的文本也会发生相同的问题,您可以在链接的测试项目中找到两个示例。

enter image description here

这是重新创建问题的测试项目的链接(仅在iOS上)

https://drive.google.com/open?id=1J2FAbh_jjJ8JnURh_-C7jBXbr02xBBGD

最佳答案

在渲染器的OnElementPropertyChanged集中

 var unconstrainedSize = new CGSize(99999999999, 99999999999);
Control.HeightAnchor.ConstraintEqualTo(unconstrainedSize.Height).Active = true;

您也可以使用padding:
public override void LayoutSubviews()
{

base.LayoutSubviews();

CGRect frame = this.top.Frame; // save frame
frame.Height = this.Bounds.Size.Height + 20f; //modify frame
//Frame.Offset(0, 20); dunno can play with this too
this.Frame = frame; // set modifyed
}

关于c# - Xamarin表单iOS CustomRenderer条目PlaceHolder和按钮文本填充底部,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59578779/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com