我有一个托管UINavigationController的UIPopoverController,它包含一个小的视图控制器层次结构。
我遵循文档,对于每个视图控制器,我像这样设置视图的popover-context大小:
[self setContentSizeForViewInPopover:CGSizeMake(320, 500)];
(每个控制器的大小不同)
当我在层次结构中向前导航时,它的工作方式与预期的一样-- popover会自动为大小更改设置动画,以与推送的控制器相对应。
但是,当我通过导航栏的Back按钮在视图堆栈中导航"Back“时,弹出窗口的大小没有改变--它仍然与最深的视图一样大。在我看来,这似乎是错误的;我期望弹出窗口在视图堆栈中弹出时会考虑到设置的大小。
我是不是遗漏了什么?
谢谢。
发布于 2014-11-17 10:59:45
下面是我在iOS 7和8中解决这个问题的方法:
在iOS 8中,iOS静默地将弹出窗口中所需的视图包装到presentingViewController视图控制器的presentedViewController中。有一段2014年的WWDC视频解释了explaining控制器的新特性。
无论如何,对于导航控制器堆栈上显示的视图控制器,它们都想要自己的大小,这些视图控制器需要(在iOS 8下)调用此代码来动态设置preferredContentSize:
self.presentingViewController.presentedViewController.preferredContentSize = CGSizeMake(320, heightOfTable);
将heightOfTable替换为您的计算表或视图高度。
为了避免大量重复的代码,并创建一个通用的iOS 7和iOS 8解决方案,我在UITableViewController上创建了一个类别,以便在我的表视图中调用viewDidAppear时执行此工作:
- (void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
[self setPopOverViewContentSize];
}
Category.h:
#import <UIKit/UIKit.h>
@interface UITableViewController (PreferredContentSize)
- (void) setPopOverViewContentSize;
@end
类别.m:
#import "Category.h"
@implementation UITableViewController (PreferredContentSize)
- (void) setPopOverViewContentSize
{
[self.tableView layoutIfNeeded];
int heightOfTable = [self.tableView contentSize].height;
if (heightOfTable > 600)
heightOfTable = 600;
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
if ([[[UIDevice currentDevice] systemVersion] floatValue] < 8.0)
self.preferredContentSize=CGSizeMake(320, heightOfTable);
else
self.presentingViewController.presentedViewController.preferredContentSize = CGSizeMake(320, heightOfTable);
}
}
@end
发布于 2012-09-11 12:39:17
在导航控制器中使用的所有视图控制器的-(void)viewDidLoad
中,添加:
[self setContentSizeForViewInPopover:CGSizeMake(320, 500)];
发布于 2010-06-01 09:46:42
我重置了视图控制器的viewWillDisappear:(BOOL)动画方法中的大小。
-(void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
CGSize contentSize = [self contentSizeForViewInPopover];
contentSize.height = 0.0;
self.contentSizeForViewInPopover = contentSize;
}
然后,当要导航回的视图出现时,我适当地重置了大小:
-(void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
CGSize contentSize;
contentSize.width = self.contentSizeForViewInPopover.width;
contentSize.height = [[self.fetchedResultsController fetchedObjects] count] * self.tableView.rowHeight;
self.contentSizeForViewInPopover = contentSize;
}
https://stackoverflow.com/questions/2752394
复制相似问题