【问题标题】:Custom UINavigationBar disappears when override SizeThatFits() - MonoTouch覆盖 SizeThatFits() 时自定义 UINavigationBar 消失 - MonoTouch
【发布时间】:2012-08-10 05:19:12
【问题描述】:

我正在尝试继承 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),但高度是正常的 (44)当 SizeThatFits() 未被覆盖时。

我正在使用 MonoTouch,我的应用在 Xcode 中构建为 Storyboard。

任何帮助表示感谢,谢谢。

【问题讨论】:

  • 这种情况是否只发生在模拟器、设备或两者上?以及您使用的是哪个版本的 MonoTouch?

标签: xamarin.ios uinavigationbar


【解决方案1】:

明确设置宽度对我来说失败了,但使用超级视图的宽度值有效:

- (CGSize)sizeThatFits:(CGSize)size {
    return CGSizeMake(self.superview.bounds.size.width, 60.0f); 
}

由于我们对 UINavigationBar 的框架或自动调整遮罩的大小没有太大影响,因此我对查询 superview 的详细信息感觉不那么粗暴——但如果有人有更好的解决方案,请分享。

【讨论】:

    猜你喜欢
    • 2011-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-20
    • 2014-02-17
    相关资源
    最近更新 更多