如何避免手动设置 UIPopoverController 的大小?

Posted

技术标签:

【中文标题】如何避免手动设置 UIPopoverController 的大小?【英文标题】:How do I avoid having to set size of UIPopoverController manually? 【发布时间】:2012-09-08 07:37:14 【问题描述】:

当我在弹出窗口中显示 ViewController 时,它会调整视图的大小。为避免这种情况,我必须使用 UIPopoverController setPopoverContentSize:settingsViewSize 手动设置视图大小

我试图覆盖 contentSizeForViewInPopover

-(CGSize)contentSizeForViewInPopover

    return self.view.frame.size;

...但无济于事。

建议?

【问题讨论】:

可能重复:***.com/questions/2926308/… 马丁,这似乎不是同一个问题。 尝试在contentSizeForViewInPopover:return CGSizeMake(200., 200.)中设置一个明确的大小。 马丁,这就是我想要避免的。我想使用 IB 来设计我的视图,并且如果我改变它们的大小就不必更新代码。这是一个大问题,因为我的应用程序是多语言的,并且某些视图的大小因语言而异。 好的,我明白了。但也许它有助于缩小问题范围:设置显式大小是否有效? 【参考方案1】:

您的代码不起作用,因为在 viewWillDisplay 之前调用了 contentSizeForViewInPopover,因此尚未设置视图的框架。不过,您可以做一些事情。

如果您使用UITableViewController 一个鲜为人知的技巧来调整您的UIPopoverViewController 以匹配您的UITableView 的高度是使用tableView 的rectForSection 方法给您高度。像这样在 viewController 的 contentSizeForViewInPopover 中使用高度:

- (CGSize)contentSizeForViewInPopover 

    // Currently no way to obtain the width dynamically before viewWillAppear.
    CGFloat width = 200.0; 
    NSInteger lastSectionIndex = [self.tableView numberOfSections] - 1;
    CGRect rect = [self.tableView rectForSection:lastSectionIndex];
    CGFloat height = CGRectGetMaxY(rect);
    return (CGSize)width, height;

或者,您可以在 viewController 的 viewWillAppear: 方法中手动设置 contentSizeForViewInPopopver 属性,并在创建弹出框时设置它的大小。

因此,在弹出窗口中的 viewController 中,您将拥有以下内容:

- (void)viewWillAppear:(BOOL)animated

    [super viewWillAppear:animated];
    self.contentSizeForViewInPopover = self.view.size

你会像这样创建你的弹出框:

MyViewController *vc = [self.storyboard instantiateViewControllerWithIdentifier:@"vc"];
self.currentPopover = [[UIPopoverController alloc] initWithContentViewController:vc];
[self.currentPopover presentPopoverFromRect:sender.bounds 
                                     inView:sender 
                   permittedArrowDirections:UIPopoverArrowDirectionUp 
                                   animated:YES];

// resize the popover to match what you set in vc viewDidLoad
[self.currentPopover setPopoverContentSize:vc.contentSizeForViewInPopover animated:NO];

【讨论】:

contentSizeForViewInPopover 在 ios7 中已弃用。试试这个是 viewDidAppearself.preferredContentSize = self.tableView.contentSize;

以上是关于如何避免手动设置 UIPopoverController 的大小?的主要内容,如果未能解决你的问题,请参考以下文章

jquery datepicker - 避免手动输入日期

如何避免最终用户需要手动启动 Google Places Autocomplete 下拉菜单?

有一个未命名的部分或手动附加关系以避免这种情况?

在 iPad 的同一视图中加载多个 popOver

DHCP服务(自动分配IP和手动分配IP)

App如何避免手动输入密码造成的安全风险?