5

我有一个view带有一堆按钮的UIScrollView. 当用户按下按钮时,我希望 UIPopOverController 显示指向所选按钮。它有点工作,但弹出框的大小错误并指向视图中的随机点。这是我的代码。

-(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];
}

比弹出框大小的问题:在弹出框内部的视图中,我有:

self.contentSizeForViewInPopover = scroll.contentSize;
NSLog(@"%f, %f", scroll.contentSize.height, scroll.contentSize.width);
NSLog(@"showing: %f, %f",  self.contentSizeForViewInPopover.height,  self.contentSizeForViewInPopover.width);

并且两个日志都匹配。所以我认为一切都应该正常工作。但事实并非如此。这是一个屏幕截图。如果您需要更多我的代码,请告诉我。提前致谢。

错误的屏幕截图

4

2 回答 2

23

我注意到的第一件事是您应该使用 button.frame 而不是 button.bounds 用于from矩形。这些UIView属性的区别:

视图的几何结构由其框架、边界和中心属性定义。frame 属性定义了视图在其父视图的坐标系中的原点和尺寸,通常在布局时用于调整视图的大小或位置。

bounds 属性定义视图的内部尺寸,因为它看到它们并且几乎专门用于自定义绘图代码。

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

// so something like this ...
[self.popover setPopoverContentSize:CGSizeMake(320, 460)];
// and to bind the popover to your button 
[self.popover presentPopoverFromRect:button.frame inView:self.view permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];
于 2011-07-21T03:46:35.153 回答
1

仅关于弹出框的大小:我设法使用可变高度的 UILabel 来做到这一点:

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

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

于 2011-07-24T16:26:18.290 回答