19

私はUIViewController呼び出されHomeViewController、データの配列を含むモデルを持っています。 HomeViewControllerまた、押すとUITableViewControllerモデルのデータ配列が表示されるボタンもあります。

私の質問は、ポップオーバーのサイズを設定する標準/最良の方法は何ですか? データを表示するのに十分な高さのポップオーバーのみが必要ですが、それ以上の高さは必要ありません。一般的な慣行とは何ですか?contentSizeForViewInPopoverある時点で設定する必要があると思いますが、どこにあるのかわかりません...viewDidLoadポップオーバークラスのメソッドで?メソッドでprepareForSegue

ここに私がこれまでに持っているコードがあります:(DataPresentingViewController私のポップオーバービューコントローラクラスであることに注意してください`)

//In HomeViewController
- (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if([segue.destinationViewController isKindOfClass:[DataPresentingViewController class]])
    {
        DataPresentingViewController *dest = (DataPresentingViewController *) segue.destinationViewController;
        dest.mySavedData = self.myModel.mySavedData;
    }
}

メソッドcontentSizeForViewInPopoverで here を設定するだけでよいことはわかっています。prepareForSegueただし、これは popover クラスで処理する必要があるようです。

4

8 に答える 8

57

iOS7の時点でcontentSizeForViewInPopover非推奨です。UIViewController代わりにのpreferredContentSizeプロパティを使用する必要があります。

お役に立てれば!

于 2013-11-27T04:31:31.340 に答える
21

メソッドcontentSizeForViewInPopoverで設定ViewDidLoadHomeViewController

于 2012-10-16T10:48:30.107 に答える
7

contentSizeForViewInPopoverは iOS 7 で非推奨ですUIPopoverController
のプロパティ:popoverContentSizeは、UIPopoverController の contentViewController プロパティでビュー コントローラによって管理されるコンテンツ ビューのサイズを表します。
参照

利点は、iOS 3.2 以降で使用できることです。そのため、デバイスのバージョンを毎回確認する必要はなく、contentSizeForViewInPopoverメソッドを UIPopOverController オブジェクト インスタンスに置き換えるだけです。

于 2014-01-07T23:51:36.580 に答える
4

やってみました:

setPopoverContentSize:<#(CGSize)#> animated:<#(BOOL)#>

セグエロジックブロックで。ポップオーバーのサイズをデータセットに基づいて可変にしたり、ビューの配置などを変更したりする場合に便利です。

于 2012-08-18T13:33:43.133 に答える
2

次のコードを試してください。

- (IBAction)setData:(id)sender
{
    UIViewController *popoverContent=[[UIViewController alloc] init];
    UITableView *tableView=[[UITableView alloc] initWithFrame:CGRectMake(265, 680, 0, 0) style:UITableViewStylePlain];

     UIView *popoverView=[[UIView alloc] initWithFrame:CGRectMake(0, 0, 200, 300)];

     popoverView.backgroundColor=[UIColor whiteColor];

    popoverContent.view=popoverView;
    popoverContent.contentSizeForViewInPopover=CGSizeMake(200, 420);//setting the size
    popoverContent.view=tableView;
    tableView.delegate=self;
    tableView.dataSource=self;

    self.popoverController=[[UIPopoverController alloc] initWithContentViewController:popoverContent];
    [self.popoverController presentPopoverFromRect:CGRectMake(400, 675, 0, 0) inView:self.view permittedArrowDirections:UIPopoverArrowDirectionDown animated:YES];
}
于 2013-03-15T04:30:15.807 に答える
2

UIPopoverViewControllerの高さに合わせてサイズを変更するためのあまり知られていないトリックUITableViewは、tableView のrectForSectionメソッドを使用して高さを指定することです。contentSizeForViewInPopover次のように、viewController で高さを使用します。

- (CGSize)contentSizeForViewInPopover {
    // Currently no way to obtain the width dynamically before viewWillAppear.
    CGFloat width = 200.0; 
    CGRect rect = [self.tableView rectForSection:[self.tableView numberOfSections] - 1];
    CGFloat height = CGRectGetMaxY(rect);
    return (CGSize){width, height};
}
于 2013-04-07T18:10:46.423 に答える
1

プログラムで実行したいようですが、ストーリーボードでは、ビューコントローラーをセグエに接続する前に、属性インスペクターの下に「ポップオーバー、明示的なサイズオプションを使用してください」があります。最初にアプリに最適なサイズを設定し、コードを使用してサイズを気にする必要がないかもしれません。これが役に立てば幸いです。どうなるか教えてください。

于 2012-08-06T22:11:35.377 に答える