Avi*_*ron 26 cocoa-touch objective-c ipad uipopovercontroller ios
我有一个UIViewController包含一个UITableView.这UIViewController是在一个显示UIPopoverController.
现在,事情是,物品的数量tableView不是恒定的,我想要弹出的大小(即 - popoverContentSize),根据物品的数量进行调整tableView
天真,我在想,如果我将设置contentSizeForViewInPopover在viewDidLoad我加载后,tableView所有的项目-它会做到这一点.
它没有.
所以简而言之,我的问题是:如何popoverContentSize直接改变contentViewController- 在它被呈现之后?
附录:

Avi*_*ash 47
我可能很晚才回答,但是对于来自iOS 7的新用户,请在你的UIViewController i中使用以下行,你的UIPopOverViewConotroller的contentViewController
-(void) viewDidAppear:(BOOL)animated{
[super viewDidAppear:animated];
self.preferredContentSize=myTableView.contentSize;
}
Run Code Online (Sandbox Code Playgroud)
希望这对iOS 7用户有所帮助.
好吧,最后我做了一些事我不确定这是不是正确的事情,但它确实有效.
我在contentViewController中向popoverController添加了一个引用:
@property (nonatomic , assign) UIPopoverController *popoverControllerContainer;
Run Code Online (Sandbox Code Playgroud)
然后,我将调整大小代码添加到viewWillAppear和viewDidAppear:
- (void)viewDidLoad
{
[super viewDidLoad];
[self.tableView reloadData];
}
-(void) viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
self.contentSizeForViewInPopover = self.tableView.contentSize;
}
-(void) viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
[self.popoverControllerContainer setPopoverContentSize:self.contentSizeForViewInPopover animated:YES];
}
Run Code Online (Sandbox Code Playgroud)
因此,保持对popover的引用有点像hack-ish,所以我愿意听到更好的想法.
一个的UIViewController类具有属性
self.contentSizeForViewInPopover
Run Code Online (Sandbox Code Playgroud)
这将调整pop的大小,而不需要添加对它的引用.
为了扩展解决方案,我使用了方法rectForSection:获取部分的大小(我的只有1个部分,很容易得到),然后添加了导航栏的高度(似乎是20).所以我能够创建完成的表视图大小的弹出窗口:
CGRect sectionRect = [view.tableView rectForSection:0];
if (sectionRect.size.height + 20 < POPOVER_SIZE.height)
view.contentSizeForViewInPopover = CGSizeMake(POPOVER_SIZE.width, sectionRect.size.height + 20);
else
view.contentSizeForViewInPopover = POPOVER_SIZE;
Run Code Online (Sandbox Code Playgroud)
多个部分可能会更难,我没试过.应该只能总结一段高度,但可能会有一些我不知道的间距问题.
适用于iOS 7或更高版本.
- (CGSize)preferredContentSize {
return CGSizeMake(320, 550);
}
Run Code Online (Sandbox Code Playgroud)
如果您是容器的孩子,请将内容大小重定向给自己.例如,在UINavigationController子类中:
- (CGSize)preferredContentSize {
return self.topViewController.preferredContentSize;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
32039 次 |
| 最近记录: |