![](/img/trans.png)
[英]With an iOS custom renderer, is there a way I can make a question mark item appear in a TextCell and open up a dialog box?
[英]With a custom renderer can I make a TableSection.Title appear in small mixed case?
這是我現在擁有的:
<TableView Intent="Settings">
<TableRoot>
<TableSection>
<TableSection.Title>
This appears in uppercase
</TableSection.Title>
是否有一種方法可能與iOS自定義渲染器,我可以將顯示的字體轉換為混合的大寫和小寫,並使字體大小更小,如我在設置>控制中心看到Apple用戶?
對於iOS,您需要具有UITableView本機控件的XF TableView TableViewRenderer。 更多信息:
以下是解決方案。 函數Draw的渲染器中的代碼應該在OnElementChanged中完成,但不幸的是,似乎Xamarin有一個bug https://bugzilla.xamarin.com/show_bug.cgi?id=58731文本轉換不起作用的另一個問題是https: //bugzilla.xamarin.com/show_bug.cgi?id=58732
還有一個小優化 - 每次添加控件繪制的textDecapitalized時,都避免在渲染器中進行文本轉換。 回答另一個問題如何更改文本大小我添加了hv.TextLabel.Font設置(注釋掉但工作)。
所以,解決這兩個錯誤:
XML
<?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:local="clr-namespace:ButtonRendererDemo;assembly=ButtonRendererDemo"
x:Class="ButtonRendererDemo.CustomTablePage">
<ContentPage.Content>
<local:CustomTableView Intent="Settings">
<TableRoot>
<TableSection Title="First Case Sensitive Header">
<SwitchCell Text="New Voice Mail" />
</TableSection>
<TableSection Title="Second Case Sensitive Header">
<SwitchCell Text="New Mail" On="true" />
</TableSection>
</TableRoot>
</local:CustomTableView>
</ContentPage.Content>
</ContentPage>
頁面代碼
namespace ButtonRendererDemo
{
[XamlCompilation(XamlCompilationOptions.Compile)]
public partial class CustomTablePage : ContentPage
{
public CustomTablePage()
{
InitializeComponent();
}
}
public class CustomTableView : TableView
{
}
}
渲染
[assembly: ExportRenderer(typeof(CustomTableView), typeof(CustomTableViewRenderer))]
namespace ButtonRendererDemo.iOS
{
public class CustomTableViewRenderer : TableViewRenderer
{
bool textDecapitalized = false;
public override void Draw(CGRect rect)
{
base.Draw(rect);
if (!textDecapitalized)
{
textDecapitalized = true;
var tableView = Control as UITableView;
var numSections = tableView.NumberOfSections();
for (nint s = 0; s < numSections; s++)
{
var hv = tableView.GetHeaderView(s);
if (hv != null) //always null in OnElementChanged. Bug reported
{
//unfortunately TextInfo doesn't work. Bug reported
//TextInfo textInfo = new CultureInfo("en-US", false).TextInfo;
// OR
//TextInfo textInfo = Thread.CurrentThread.CurrentCulture.TextInfo;
if (hv.TextLabel.Text.ToUpper().StartsWith("FIR"))
hv.TextLabel.Text = "First Case Sensitive Header";
else if (hv.TextLabel.Text.ToUpper().StartsWith("SEC"))
hv.TextLabel.Text = "Second Case Sensitive Header";
//hv.TextLabel.Font = UIFont.FromName(hv.TextLabel.Font.Name, 5f);
}
}
}
}
}
}
最終結果與小字體區分大小寫
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.