スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
このエントリーをはてなブックマークに追加

[iOS]UIPopoverControllerのサイズについて

UIPopoverControllerは吹き出しのような形のウィンドウに、コンテンツを埋め込み表示するUIです。

UIViewControllerを利用し、コンテンツを埋め込むのですが、
この時に、UIViewControllerをxibの有無によって1行分ソースコードが必要になります。

まずは生成コードから、
//ポップオーバー生成例
UIPopoverController *popover = [[UIPopoverController alloc] initWithContentViewController:controller];


xibでの生成をおこなったcontrollerをこの際に適用したのであれば何ら問題は有りませんが、
簡易生成の場合は、
//ポップオーバー内コンテンツを簡易作成した場合
UIViewController *controller = [[UIViewController alloc] init] autorelease];
controller.view.frame = CGRectMake(0,0,100,100);
UIPopoverController *popover = [[UIPopoverController alloc] initWithContentViewController:controller];
[popover setPopoverContentSize:control.view.frame.size]; //ここでpopoverに対してサイズを指定する必要があります。


このように、サイズを指定する必要があります。
xibファイルが存在するUIViewControllerを利用した場合は、xibからサイズを取得するような仕組みになっているようです。
無い場合はこのようにしっかり設定してあげる必要があるようです。


※上記の方法はかなり強引な方法でした。
実際にはUIViewControllerにあるcontentSizeForViewInPopoverというプロパティに対してCGSizeをセットしてあげる必要があります。

//ポップオーバー内コンテンツを簡易作成した場合
UIViewController *controller = [[UIViewController alloc] init] autorelease];
controller.view.frame = CGRectMake(0,0,100,100);
controller.contentSizeForViewInPopover = controller.view.frame.size; //コンテンツサイズを設定する。
UIPopoverController *popover = [[UIPopoverController alloc] initWithContentViewController:controller];
このエントリーをはてなブックマークに追加

tag : iOS UIViewController UIPopoverController 簡易 サイズ size

コメントの投稿

非公開コメント

Popover内に貼付けたViewですが、Popoverのサイズを変更すると貼付けたViewが切れていたりしまったりします。
Popoverのサイズに合わせて、貼付けたViewもちゃんと表示させる方法はありますか?

今、作成している内容は、Popoverの内に電卓の用なViewを表示させています。しかし、このPopoverをいろんな部分で使い回ししているため、Popoverを表示するサイズが異なってきます。そこで、Popoverのサイズを変更して表示させると、電卓の部分が切れていたりして全てのボタンを操作できないようになってしまいます。

よろしくお願いします。

Re: タイトルなし

> Popover内に貼付けたViewですが、Popoverのサイズを変更すると貼付けたViewが切れていたりしまったりします。
> Popoverのサイズに合わせて、貼付けたViewもちゃんと表示させる方法はありますか?
>
> 今、作成している内容は、Popoverの内に電卓の用なViewを表示させています。しかし、このPopoverをいろんな部分で使い回ししているため、Popoverを表示するサイズが異なってきます。そこで、Popoverのサイズを変更して表示させると、電卓の部分が切れていたりして全てのボタンを操作できないようになってしまいます。
>
> よろしくお願いします。

単純に変更後のpopoverのサイズを取得してUIViewに対してサイズを再設定するだけではないでしょうか。
popoverのpopoverContentSizeプロパティからCGSizeを取得して、

CGSize pop_size = popover.popoverContentSize;
view.frame = CGRectMake(0,0,pop_size.width,pop_size.height);

と単純にこれだけだと思います。

現在、Popoverを表示させたい部分で下記のようなコードを入れています。

PassPopover* viewpopover = [[[PassPopover alloc] init] autorelease];
viewpopover.delegate = self; //PopoverにPassWordをdelegate
_passpopover = [[UIPopoverController alloc]
initWithContentViewController:viewpopover];
[_passpopover presentPopoverFromRect:[textField frame] inView:self.view permittedArrowDirections:UIPopoverArrowDirectionUp animated:YES] ;

この中に、説明があったように
CGSize pop_size = popover.popoverContentSize;
viewpopover.frame = CGRectMake(0, 0, pop_size.width, pop_size.height);
を入れると、viewpopover.frameのframeにエラーのようなものが表示されます。
どの部分が間違えていますか?

Re: タイトルなし

> 現在、Popoverを表示させたい部分で下記のようなコードを入れています。
>
> PassPopover* viewpopover = [[[PassPopover alloc] init] autorelease];
> viewpopover.delegate = self; //PopoverにPassWordをdelegate
> _passpopover = [[UIPopoverController alloc]
> initWithContentViewController:viewpopover];
> [_passpopover presentPopoverFromRect:[textField frame] inView:self.view permittedArrowDirections:UIPopoverArrowDirectionUp animated:YES] ;
>
> この中に、説明があったように
> CGSize pop_size = popover.popoverContentSize;
> viewpopover.frame = CGRectMake(0, 0, pop_size.width, pop_size.height);
> を入れると、viewpopover.frameのframeにエラーのようなものが表示されます。
> どの部分が間違えていますか?
viewpopoverはPassPopoverですが、このPassPopoverが何のクラスなのかが私からでは定かではありません。
話の流れから察すればこれはおそらくUIViewControllerであり、このクラスにはframeというプロパティは存在しません。
正しくはUIViewControllerのもつviewプロパティに対して行うべきではないですか?

viewpopover.view.frame = CGRectMake(0, 0, pop_size.width, pop_size.height);

となるべきではないかと思います。
落ち着けばお分かりになると思います。

よく考えればわかりました。
iOSプログラミングの開発は最近始めたばかりで、わからないことが多くてすみません。

大事な説明が抜けていました。
PassPopover* viewpopover
のPassPopoverは電卓のようなUIViewControllerを作成しているクラスです。
xibで作成しています。
_popoverは、h.で UIPopoverController* _passpopover ; と宣言しています。


教えていただいたように、以下のようにコードを追加してみましたが、思ったような実行結果になりません。
また、変更後のPopoverのサイズを取得とありますが、以下のコードの中にPopoverの変更サイズを入れたほうがよろしいでしょうか?

PassPopover* viewpopover = [[[PassPopover alloc] init] autorelease];
viewpopover.delegate = self; //PopoverにPassWordをdelegate
_passpopover = [[UIPopoverController alloc]
initWithContentViewController:viewpopover];
CGSize pop_size = _passpopover.popoverContentSize;
viewpopover.view.frame = CGRectMake(0, 0, pop_size.width, pop_size.height);
[_passpopover presentPopoverFromRect:[textField frame] inView:self.view permittedArrowDirections:UIPopoverArrowDirectionUp animated:YES] ;

Re: タイトルなし

> よく考えればわかりました。
> iOSプログラミングの開発は最近始めたばかりで、わからないことが多くてすみません。
>
> 大事な説明が抜けていました。
> PassPopover* viewpopover
> のPassPopoverは電卓のようなUIViewControllerを作成しているクラスです。
> xibで作成しています。
> _popoverは、h.で UIPopoverController* _passpopover ; と宣言しています。
>
>
> 教えていただいたように、以下のようにコードを追加してみましたが、思ったような実行結果になりません。
> また、変更後のPopoverのサイズを取得とありますが、以下のコードの中にPopoverの変更サイズを入れたほうがよろしいでしょうか?
>
> PassPopover* viewpopover = [[[PassPopover alloc] init] autorelease];
> viewpopover.delegate = self; //PopoverにPassWordをdelegate
> _passpopover = [[UIPopoverController alloc]
> initWithContentViewController:viewpopover];
> CGSize pop_size = _passpopover.popoverContentSize;
> viewpopover.view.frame = CGRectMake(0, 0, pop_size.width, pop_size.height);
> [_passpopover presentPopoverFromRect:[textField frame] inView:self.view permittedArrowDirections:UIPopoverArrowDirectionUp animated:YES] ;

申し訳ないのですが、この記事を読み返してみましたら、かなり怪しい記事であることがわかりました。
手が空いたときに正しい記事に修正したいと思います。

//PassPopover(UIViewController継承)を生成します
PassPopover* viewpopover = [[[PassPopover alloc] init] autorelease];
viewpopover.delegate = self; //PopoverにPassWordをdelegate
//ポップオーバーを生成し、コンテンツに viewpopover を設定します。
//この時点でおそらく自動的にポップオーバーのサイズがコンテンツに設定されたビューに合わせて
//変形しているはずです。
_passpopover = [[UIPopoverController alloc] initWithContentViewController:viewpopover];
//ポップオーバーを表示します
[_passpopover presentPopoverFromRect:[textField frame] inView:self.view permittedArrowDirections:UIPopoverArrowDirectionUp animated:YES];

この記事で紹介している
setPopoverContentSizeはポップオーバーのサイズを変更するもので、
contentSizeForViewInPopoverはUIViewControllerのviewをポップオーバー内に表示する際に表示する領域を設定するものです。
Translation


上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。
プロフィール

チーズくん

Author:チーズくん
個人的メモをただ羅列しています。
twitter:@cheese1038

バロメーター
最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。