SG1*_*SG1 68 uinavigationcontroller uipopovercontroller
我有一个包含UINavigationController的popover.我可以很好地显示popover,它包含navController就好了.navController包含一个tableView,当我选择一个项目时,它会创建一个新的详细信息视图:
DeviceDetailViewController *detailViewController =
[[[DeviceDetailViewController alloc] initWithNibName:@"DeviceDetailViewController" bundle:nil] autorelease];
Run Code Online (Sandbox Code Playgroud)
然后我把它推到新的视图控制器:
[self.navigationController pushViewController:detailViewController animated:YES];
Run Code Online (Sandbox Code Playgroud)
这是出现问题时: 之后的酥料饼调整大小以在iPad上可用的最大高度推新视图.
我已经尝试将xib中所有视图的高度设置为固定高度而不是灵活.我试过明确设置弹出窗口的高度.我也尝试使用不同的视图控制器作为子视图.问题仍然是:在酥料饼想将自己调整到最大高度时会自动新视图推送到导航控制器.
这是一个问题,讨论在推送新视图时试图故意控制弹出窗口的大小:
我认为这可能是一种控制大小的强力方法.然而,奇怪的是,它实际上会导致一些快速的图形怪癖(好像视图正在进行动画处理),然后继续调整大小,如上所述.
换句话说,某些东西确实迫使popover达到其最大高度,并且似乎在调用所有委托方法之后发生.
是导航控制器吗?有没有人见过这种事?
bor*_*ked 123
在我遇到同样的问题后,这也为我解决了这个问题(今天也是如此):
编辑:正如contentSizeForViewInPopover在iOS7.0这样使用中弃用preferredContentSize.
原答案如下:
在你的detailViewController添加中:
- (void)viewWillAppear:(BOOL)animated {
CGSize size = CGSizeMake(320, 480); // size of view in popover
self.contentSizeForViewInPopover = size;
[super viewWillAppear:animated];
}
Run Code Online (Sandbox Code Playgroud)
您还希望添加类似于原始DeviceDetailViewController的内容,以防止在点击后面的NavbarItem时调整大小.
Pet*_*ese 30
就像处理它一样viewWillAppear,另一种处理方法就是覆盖它contentSizeForViewInPopover.非常简洁:
-(CGSize)contentSizeForViewInPopover
{
return self.view.bounds.size;
}
Run Code Online (Sandbox Code Playgroud)
MUH*_*nc. 30
对于IOS5
我建议你这样做:
- (void)viewDidLoad {
[super viewDidLoad];
CGSize size = CGSizeMake(320, 480); // size of view in popover
self.contentSizeForViewInPopover = size;
}
Run Code Online (Sandbox Code Playgroud)
Kur*_*urt 11
我有类似的问题.
我从工具栏中的按钮出现了弹出窗口.弹出窗口设置为特定大小.这是一个表格视图.选择表格行时,会调用带有导航控制器的新视图控制器.
当选择后退按钮时,弹出窗口变为默认大小(我相信为320x1100),而不是我想要的特定大小.
原始代码是:
MyTableViewController *myVC = [[MyTableViewController alloc] init];
UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:myVC];
UIPopoverController *popover = [[UIPopoverController alloc] initWithContentViewController:navController];
popover.delegate = self;
popover.popoverContentSize = CGSizeMake(400.0, 500.0);
[myVC release];
[navController release];
[popover release];
Run Code Online (Sandbox Code Playgroud)
我添加了一行来解决问题.当然,这是一种解决方法,因为我不得不减去标题的高度.也许你们其中一个人可以用更好的方法来启发我.无论如何,它的工作原理.
MyTableViewController *myVC = [[MyTableViewController alloc] init];
UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:myVC];
UIPopoverController *popover = [[UIPopoverController alloc] initWithContentViewController:navController];
popover.delegate = self;
popover.popoverContentSize = CGSizeMake(400.0, 500.0);
//Subtract the height of the header to match the total popover size (not just the view).
myVC.contentSizeForViewInPopover = CGSizeMake(400.0, 500-44);
[myVC release];
[navController release];
[popover release];
Run Code Online (Sandbox Code Playgroud)
我相信当涉及导航控制器并按下后退按钮时,它会使弹出窗口默认为其默认大小.通过为视图控制器myVC添加contentSizeForViewInPopover属性,它会强制使用特定大小.
希望这是有帮助的.
库尔特
对于iOS 7,请使用以下内容:
- (void)viewDidLoad
{
[super viewDidLoad];
CGSize size = CGSizeMake(320, 768); // size of view in popover
self.preferredContentSize = size;
}
Run Code Online (Sandbox Code Playgroud)
UIViewController.contentSizeForViewInPopover 已在iOS 7中首先弃用.
为了响应动画的图形故障:
如果您在其中创建带有UINavigationController的弹出框,则UIPopoverController动画与UINavigation控制器动画冲突.在动画制作时会出现图形故障.要解决此问题,请在推送其他控制器或显示工具栏时将动画参数设置为false.
推送视图控制器:
[self.navigationController pushViewController:detailViewController animated:NO];
Run Code Online (Sandbox Code Playgroud)
使工具栏可见:
[[self navigationController] setToolbarHidden:NO animated:NO];
Run Code Online (Sandbox Code Playgroud)
设置动画:NO将使动画在UIPopoverController中看起来正确.
为什么不在contentSizeForViewInPopover将下一个控制器推入导航堆栈之前设置?无需设置尺寸viewWillAppear等.
[nextController setContentSizeForViewInPopover:[self contentSizeForViewInPopover]];
[[self navigationController] pushViewController:nextController animated:YES];
Run Code Online (Sandbox Code Playgroud)
适用于IOS 5.1
| 归档时间: |
|
| 查看次数: |
48785 次 |
| 最近记录: |