Iphone 设置超控器的大小

Iphone 设置超控器的大小,iphone,ipad,uiscrollview,uipopovercontroller,popover,Iphone,Ipad,Uiscrollview,Uipopovercontroller,Popover,我有一个视图,在UIScrollView中有一组按钮。当用户按下按钮时,我希望UIPopOverController显示指向所选按钮的内容。这是一种工作方式,但是popover的尺寸是错误的,并且指向视图中的一个随机点。这是我的密码 -(void)detail:(id)sender{ UIButton *button = sender; NSLog(@"tag = %i", button.tag); UINavigationController *navControll

我有一个
视图
,在
UIScrollView
中有一组按钮。当用户按下按钮时,我希望UIPopOverController显示指向所选按钮的内容。这是一种工作方式,但是popover的尺寸是错误的,并且指向视图中的一个随机点。这是我的密码

-(void)detail:(id)sender{
    UIButton *button = sender;
    NSLog(@"tag = %i", button.tag);

    UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:viewController];
    if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
    self.popover = [[UIPopoverController alloc] initWithContentViewController:navController];
    self.popover.delegate = self;
    [self.popover presentPopoverFromRect:button.bounds inView:self.view permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];
}
而不是popover的大小问题: 在popover内的视图中,我有:

self.contentSizeForViewInPopover = scroll.contentSize;
NSLog(@"%f, %f", scroll.contentSize.height, scroll.contentSize.width);
NSLog(@"showing: %f, %f",  self.contentSizeForViewInPopover.height,  self.contentSizeForViewInPopover.width);
而且两个日志都匹配。所以我认为一切都应该正常工作。但事实并非如此。这是一个屏幕截图。如果您需要更多我的代码,请告诉我。提前谢谢


我注意到的第一件事是,应该使用button.frame而不是button.bounds作为from矩形。这些属性之间的差异:

视图的几何图形由其框架、边界和中心定义 财产。“结构件”特性定义结构件的原点和尺寸 视图位于其superview的坐标系中,通常为 在布局期间用于调整视图的大小或位置

bounds属性定义视图的内部尺寸 可以看到它们,并且几乎只在自定义图形代码中使用

您可以使用其消息设置控制器的高度:


仅就popover的大小而言:我设法使用可变高度的UILabel:

UILabel *hinweis;
hinweis.text = @"...";
hinweis.frame = CGRectMake(x,y,width,800);
[hinweis sizeToFit];

对于箭头:您是否尝试过不同的inView参数,如self.parentViewController.view?

presentpooverfromtrect
更改为
frame
,效果会更好一些。但我认为问题的一部分是由于按钮位于
UIScrollView
中,因此显示popover时,原始区域按钮框架不再是框架。另外,我不能像那样设置popover框架,因为我想根据框架中文本的大小进行更改popover@JaspreetSingh我的荣幸:)在此期间,我学会了将contentOffset用于tableView,它应该与scrollView类似CGRect f=[tableView rectForRowAtIndexPath:indexPath];CGPoint yOffset=[tableView contentOffset];CGRect frame=CGRectMake(f.origin.x,f.origin.y+45-yOffset.y,200,40);[self.poc presentPooverFromRect:frame…`此外,还需要初始化该UILabel。
UILabel *hinweis;
hinweis.text = @"...";
hinweis.frame = CGRectMake(x,y,width,800);
[hinweis sizeToFit];