从Storyboard实例化时,未应用Interface Builder中定义的样式元素

时间:2013-12-29 15:24:04

标签: ios xamarin.ios storyboard xamarin uistoryboard

我有一个在Xamarin.iOS(C#,Monotouch)中开发的iOS应用程序,其中主要UI不是基于故事板的。 (我这样做是因为我的应用程序在纵向和横向方向上需要结构上不同的布局,并且通过编程方式比通过IB和故事板更容易实现。)

我的问题是我现在正在尝试使用Storyboard开发一个简单的对话框,但是当我实例化对话框时,结构就在那里但是Interface Builder中定义的样式元素没有被应用。我读过的所有内容似乎都表明这应该发生。这尤其成问题,因为在初始化界面后,大多数样式元素都无法修改。

这是我进行实例化的代码:

UIStoryboard sb = UIStoryboard.FromName("StoryboardAppSettings", null);
var vc = sb.InstantiateViewController("TableViewControllerAppSettings");
UIViewController settingsVC = vc as UIViewController;
PresentViewController(settingsVC, true, null);

我已经定义了一个“分组”的UITableView,但事实并非如此。我有两个UISwitch元素,其中定义了未应用的颜色。我有按钮的颜色没有被应用。

(如果我设置断点并向下钻取到视图控制器数据结构中,我发现所有这些参数都设置正确......当实现层次结构时,它们似乎被忽略了。)

我做错了什么?

1 个答案:

答案 0 :(得分:1)

我发现问题是我正在设置UIView.Appearance.BackgroundColor。看来,当你这样做时,UIView.Appearance.BackgroundColor总是覆盖UISwitch.OnTintColor。 (在我看来这可能是一个bug,可能在iOS中,但我可能误解了Appearance API应该如何工作。我的期望是可以在更具体的层次上覆盖广义的全局设置(如UIView.Appearance)(后代视图)或者特定的实例化),我相信这是大多数其他Appearance属性的工作方式.UISwitch.OnTintColor(以及UISwitch.TintColor和UISwitch.BackgroundColor,但不是UISwitch.ThumbTintColor)似乎是例外(因此bug ),而不是规则。