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() でブレークポイントを設定すると、「サイズ」パラメーターは空になります (幅 = 高さ = 0)。
その上で LayoutSubviews() とブレークポイントをオーバーライドすると、SizeThatFits() メソッドがオーバーライドされるたびに Bounds プロパティと Frame プロパティの高さがおかしい (例: 9.035957E-33) になりますが、SizeThatFits() がオーバーライドされない場合、高さは通常 (44) です。オーバーライドされます。
私は MonoTouch を使用しており、私のアプリは Xcode で Storyboard として構築されています。
ご協力ありがとうございます。