0

UIPopoverController 内に UINavigationController を埋め込んでいます。それは「機能します」が、ポップオーバーの上部の境界線は (その背後にある) ナビゲーション コントローラー バーのサイズに拡大し、境界線の影をメイン ビューの上部にキャストします (読み取り: ポップオーバーの上部の境界線の高さは 44 ポイントです)。 )。UINavigationController 内ではなく、クラス自体でポップオーバーをインスタンス化すると、すべて正常に動作します (ただし、もちろん、ナビゲーション コントローラーにはアクセスできません)。

どこが間違っていますか?

CGPoint buttonPoint = [self.mapView convertPoint:sender.center fromView:self.guideButtonScroll];

GuideViewController *guideViewController = [[GuideViewController alloc] initWithNibName:@"GuideView" bundle:nil];

UINavigationController *guideNavigationController = [[UINavigationController alloc] initWithRootViewController:guideViewController];

self.buttonbarPopoverController = [[UIPopoverController alloc] initWithContentViewController:guideNavigationController];
self.buttonbarPopoverController.delegate = self;
self.buttonbarPopoverController.popoverContentSize = CGSizeMake(320, 504);
[self.buttonbarPopoverController presentPopoverFromRect:CGRectMake(buttonPoint.x - 30, buttonPoint.y, 10, 10) inView:self.mapView permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];
4

2 に答える 2

0

UIPopoverController をサブクラス化しましたが、ポップオーバーの光沢のある外観にはなりませんでした。UINavigationController を UIViewController 内に配置するだけで、カスタム ナビゲーション バーとポップオーバーの光沢のある外観を取得できます。これが私が最終的に得たものです:

UIViewController *guideviewViewController = [[UIViewController alloc] init];
guideviewViewController.view.frame = CGRectMake(0, 0, 320, 508);

GuideViewController *guideViewController = [[GuideViewController alloc] initWithNibName:@"GuideView" bundle:nil];

self.guideNavigationController = [[UINavigationController alloc] initWithRootViewController:guideViewController];
self.guideNavigationController.view.frame = CGRectMake(0, 0, 320, 508);

[guideviewViewController.view addSubview:self.guideNavigationController.view];

CGPoint buttonPoint = [self.mapView convertPoint:sender.center fromView:self.guideButtonScroll];

self.guidePopoverController = [[UIPopoverController alloc] initWithContentViewController:guideviewViewController];
self.guidePopoverController.delegate = self;
self.guidePopoverController.popoverContentSize = CGSizeMake(320, 508);
[self.guidePopoverController presentPopoverFromRect:CGRectMake(buttonPoint.x - 30, buttonPoint.y, 10, 10) inView:self.mapView permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];
于 2013-03-19T00:07:16.853 に答える
0

表示されているのは、展開されたポップオーバーの上端ではありません。ポップオーバーには通常の境界線があります。表示されているのは、ナビゲーション コントローラーのビューの上部にある UINavigationBar です。UINavigationBar は、iOS 6 で影を落とします。

UINavigationBar には、ポップオーバーの境界線と一致する特別な色/スタイルが自動的に与えられます。もちろん、気に入らない場合は変更できます。表示したくない場合は、ナビゲーション コントローラーのナビゲーション バーを自由に非表示にすることもできます。

于 2013-03-18T02:49:37.973 に答える