4

次のコード行を使用して、のUIViewとして追加した のサブクラスがあります。titleViewnavigationItem

self.navigationItem.titleView = tempview;

簡単です。それはうまくいきます。私の問題は、これnavigationItemが時々rightBarButton更新されることです(ボタンがない場合もあれば、標準サイズのボタンが1つある場合もあれば、より大きなボタンがある場合もあります)。

として追加したクラスのlayoutSubviewsメソッドを簡単に使用できると考えたので、これを入れました:tempviewtitleView

-(void)layoutSubviews {
    [super layoutSubviews];
    self.mylabel.frame = self.bounds;
}

rightBarButtonアイテムが更新されたときにタイトルビューのサイズが正しく変更されないため、これは機能していないようです。

また、境界が小さくなると境界が拡大せず、単に位置が変わることにも気付きました。

私は and を使用してみましsetNeedsLayoutlayoutIfNeededが、それらは単に間違った境界でビューを「サイズ変更」します。

また、アイテムが nil に設定されていることも確認しましたrightBarButtonが、縮小するとビューが正しく拡大されません。

助けてくれてありがとう!

4

3 に答える 3

4

ビューを構成する

[self setAutoresizingMask:UIViewAutoresizingFlexibleHeight|UIViewAutoresizingFlexibleWidth];

(おそらく initWithFrame で)

次に実装します

- (void)willMoveToSuperview:(UIView *)newSuperview
{
    [self setFrame:[newSuperview bounds]];
}

これで、ビューがコンテナのサイズに一致し、自動的にサイズ変更されます。

于 2011-04-26T17:35:02.593 に答える
2

デフォルトでは、layoutSubviews は何もしません。また、titleView のサイズを変更することもないため、navbar が変更しない限り、何も変更されていないことは驚くことではありません。

スーパービュー(autoresizesubviewsが有効になっているもの)のサイズが変更されたときにトリガーされると確信しているため、サブビューの1つのサイズのみを変更しているため、自動サイズ変更は機能しないと思います。右ボタンを変更するときは、タイトルビューのサイズを再計算することをお勧めします。最初に追加したときに自動的に収まる場合は、削除して再度追加することもできますが、それはかなり醜いハックであることはわかっています。

于 2010-02-04T03:22:25.943 に答える
0

オーバーライドする代わりに-layoutSubviews、autoresizingMask プロパティを設定してみましたか?

tempView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
于 2010-02-04T00:56:37.920 に答える