【发布时间】:2016-05-24 06:35:38
【问题描述】:
UIAlertController 自定义字体不起作用。
下面的代码是一个函数ShowActionSheetAsync,显示ActionSheet。
此时,我想更改ActionSheet的字体。我尝试了几种方法,但效果不佳。有好的解决办法吗?
public Task<bool> ShowActionSheetAsync()
{
var source = new TaskCompletionSource<bool>();
var alert = new UIAlertController
{
Title = "title"
};
alert.AddAction(UIAlertAction.Create(
"button1",
UIAlertActionStyle.Default,
_ => source.SetResult(true)));
alert.AddAction(UIAlertAction.Create(
"cancel",
UIAlertActionStyle.Cancel,
_ => source.SetResult(false)));
// [Block 1]
var viewController = UIApplication.SharedApplication.KeyWindow.RootViewController;
ViewController.PresentViewController(alert, true, delegate
{
// [Block 2]
});
// [Block 3]
return source.Task;
}
第一次尝试 以下代码无法正常工作。
-
当我将代码放在
[Block 1]或[Block 2]上时- 它根本不起作用
-
当我把代码放在
[Block 3]上时- 仅适用于首次显示
ActionSheet。从第二次开始,它不起作用
- 仅适用于首次显示
UILabel.AppearanceWhenContainedIn(typeof(UIActionSheet)).Font
= UIFont.FromName(StyleResources.MediumFontName, 20);
第二次尝试 下面的代码也不能正常工作。
-
当我把代码放在
[Block 2]上时- 短时间显示默认字体后,显示自定义字体
-
当我把代码放在
[Block 3]上时- 它仅适用于
cancel按钮
- 它仅适用于
FindDescendantViews<UILabel>() 是UIView 的扩展方法,并返回所有适当类型的子视图。
var labels = alert.View.FindDescendantViews<UILabel>();
foreach (var label in labels)
{
label.Font = UIFont.FromName(StyleResources.MediumFontName, 20);
}
【问题讨论】:
-
你厌倦了
label.Font = UIFont(name: StyleResources.MediumFontName, size: 20)吗? -
我的第二次尝试和你的代码有什么区别? @JigarTarsariya
-
你的意思是我的第一次尝试? (UILabel.AppearanceWhenContainedIn) @Brett Donald
标签: c# ios xamarin.ios uialertcontroller