我正在尝试子类化UINavigationBar,并通过在Interface Builder中设置导航栏的类在我的UINavigationController中使用它。 (类似于这个答案:https://stackoverflow.com/a/10007896/139388)
当我覆盖SizeThatFits()时,NavigationBar不再出现在我的应用中。如果我注释掉覆盖并重新运行应用程序,则导航栏会正确显示。
[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),但高度是正常的(44)当SizeThatFits()没有被覆盖时。
我正在使用MonoTouch,我的应用程序在Xcode中构建为Storyboard。
感谢任何帮助,谢谢。
答案 0 :(得分:3)
对我来说明确设置宽度失败,但是使用superview的宽度值:
- (CGSize)sizeThatFits:(CGSize)size {
return CGSizeMake(self.superview.bounds.size.width, 60.0f);
}
由于我们对UINavigationBar的框架或自动调整遮罩没有太大影响,因此我对查询超级视图的细节感觉不那么重要 - 但如果有人有更好的解决方案,请分享。