如何避免手动设置 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 中已弃用。试试这个是 viewDidAppear:self.preferredContentSize = self.tableView.contentSize;
以上是关于如何避免手动设置 UIPopoverController 的大小?的主要内容,如果未能解决你的问题,请参考以下文章