2012-03-15 4 views
5

私はnavigationControllerとサブビューの束を持つUIPopoverControllerを持っています。ポップオーバーのサイズは、次のように表示される直前に設定されます。コンテンツの変更ChangeSizeInPopover navigationController iOSのプッシュ

[self.myPopover setPopoverContentSize:CGSizeMake(320, 500)]; 

これは問題ありません。ポップオーバーが調整されたサイズで表示されます。別のビューがナビゲーションに押されるとポップオーバーのサイズが再設定されているスタック - 異なる高さを必要とする - viewWillAppearメソッドで:

self.contentSizeForViewInPopover = CGSizeMake(320, 700); 

これも正常に動作します。以前のビューに戻ると、サイズは変わりません。

最初のビューでviewWillAppearで同じ呼び出しを追加しましたが、ビューのサイズが変更されません。

ビュー間を移動するときに、ポップオーバーのサイズ変更を管理するにはどうすればよいですか?

答えて

3

私はこのハックを使用します。

- (CGSize)contentSizeForViewInPopover 
{ 
    return CGSizeMake(320, 200); 
} 

- (void) forcePopoverSize 
{ 
    CGSize currentSetSizeForPopover = self.contentSizeForViewInPopover; 
    CGSize fakeMomentarySize = CGSizeMake(currentSetSizeForPopover.width - 1.0f, 
              currentSetSizeForPopover.height - 1.0f); 
    self.contentSizeForViewInPopover = fakeMomentarySize; 
} 


- (void)viewWillAppear:(BOOL)animated 
{ 
    [super viewWillAppear:animated]; 

    [self forcePopoverSize]; 
} 

- (void)viewDidAppear:(BOOL)animated 
{ 
    [super viewDidAppear:animated]; 

    CGSize currentSetSizeForPopover = self.contentSizeForViewInPopover; 
    self.contentSizeForViewInPopover = currentSetSizeForPopover; 
} 
+1

http://stackoverflow.com/questions/2752394 UIPopowerControllerのようなものであることを示しているUIViewController でのコード/ popover-with-embedded-navigation-controller-doesnt-back-on-back-nav- – Injectios

+0

残念ながら、動作しません。 –

+1

この種の作品:http://stackoverflow.com/a/2946864/384864 –

3

これはトリッキーなものです。私は多くのことを試み、最終的にこれを働かせました。それだけであなたのために働くかもしれません。

私のcontentViewController私はUIPopoverController * parentへの参照を保持します。

この参照は、UIPopoverControllerの初期化中に設定されています。内容は次のとおりです。 これはもちろん、ビュー階層に直接当てはまらない場合があります。

if (self.popoverController == nil) { 
    _contentController = [[ContentViewController alloc] initWithNibName:@"ContentViewController" 
                   bundle:[NSBundle mainBundle]]; 

    UIPopoverController *popover = [[UIPopoverController alloc] initWithContentViewController:_contentController]; 
    _contentController.parent = popover; 
    [popover setPopoverContentSize: CGSizeMake(520.0,580.0)]; 

    popover.delegate = self; 

    self.popoverController = popover; 
} 

と私は動的に私が使用contentViewController内からコンテンツのサイズを変更したいとき:

-(void)setNewSize:(CGSize) newSize { 

    [_parent setPopoverContentSize:newSize animated:YES]; 
} 
+0

参照の周りを運ぶ良い練習ではありません。まだ良いアイデア... –

+1

@BorutTomazin:私は知っている - それは実際に醜いです:)しかし、仕事の8時間後に私はついに働いたことを見つけました。おそらくこれは一度もっとエレガントな解決策を見つけるつもりです...おそらく。上記のリンクを試してみます。 –

+1

ええ、私は知っています。時には醜いものであり、うまく動作していないものよりもうまくいっています。 :)より良い解決策を見つけたら教えてください。ありがとう! –