我正在尝试继承 UINavigationBar,并通过在 Interface Builder 中设置导航栏的类在我的 UINavigationController 中使用它。(类似于这个答案:https ://stackoverflow.com/a/10007896/139388 )
当我覆盖 SizeThatFits() 时,导航栏不再出现在我的应用程序中。如果我注释掉覆盖并重新运行应用程序,导航栏会正确显示。
[Register ("MyNavigationBar")]
public partial class MyNavigationBar : UINavigationBar
{
public MyNavigationBar (IntPtr handle) : base (handle)
{
}
// If I comment out this method, the navigation bar appears properly
public override SizeF SizeThatFits (SizeF size)
{
return base.SizeThatFits (size);
}
}
现在,我希望覆盖仅返回基本实现的方法不会修改类的行为,但我对 iOS 和 MonoTouch 不够熟悉,无法理解这是否是预期/未定义的行为,以及我能做什么关于它。
我注意到的一些事情:
如果我在 SizeThatFits() 上设置断点,则“size”参数为空(Width=Height=0)。
如果我重写 LayoutSubviews() 并在其上设置断点,那么只要 SizeThatFits() 方法被重写,Bounds 和 Frame 属性就会有有趣的高度(例如 9.035957E-33),但是当 SizeThatFits() 不是时高度是正常的(44)被覆盖。
我正在使用 MonoTouch,我的应用程序在 Xcode 中构建为 Storyboard。
任何帮助表示赞赏,谢谢。