gpt4 book ai didi

ios - 添加 subview myNavigationController.view 时关闭 20 像素(y 轴)

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:48:19 26 4
gpt4 key购买 nike

我有一个带菜单按钮的导航 Controller 。按下菜单按钮时,当前 View (及其导航栏)应向右滑动,菜单应同时且连续地从左侧滑入。详细信息在下面代码的注释中解释。

它的工作原理除了一个方面。当前 View (在本例中为“对话”)在添加回我实现的容器 View 时,必须将其框架设置为“y.min”=-20,否则其导航栏上方有 20 个像素。但是,当我将其 y.min 设置为 -20 时,这会将其 View 内的所有内容向上移动 20 像素。因此,当按下菜单按钮时,当前 View 中的所有内容都会突然向上跳跃 20 个像素。

我不知道为什么会这样,也不知道如何纠正。也有可能有一种更简单的方法来完成所有这些,但我不知道有一个。*(*我对第三方文件不感兴趣。我想自己学习。)

代码如下:

- (IBAction) showMenu:(id)sender
{

// get pointer to app delegate, which contains property for menu pointer
AppDelegate *appDelegate = getAppDelegate;

//create container view so that current view, along with its navigation bar, can be displayed alongside menu
UIView *container = [[UIView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 320.0f, 548.0f)];
[container setBackgroundColor:[UIColor blueColor]];

//before presenting menu, create pointer for current view, to be used in completion routine
UIView *presenter = self.navigationController.view;

//present menu's VC. it is necessary to present its (table) VC, not just add its view, to retain the functionality of its cells
[self presentViewController:appDelegate.menuVC animated:NO completion: ^{

//obtain a pointer to the menu VC's view
UIView *menuTemp = appDelegate.menuVC.view;

//replace menu VC's view with the empty container view
appDelegate.menuVC.view = container;

//add the menu view to the container view and set its frame off screen
[container addSubview:menuTemp];
menuTemp.frame = CGRectMake(-260.0f, 0.0f, 260.0f, 548.0f);

//add the the view that was displayed when the user pressed the menu button. set its frame to fill the screen as normal
[appDelegate.menuVC.view addSubview:presenter];
presenter.frame = CGRectMake(0.0f, 0.0f, 320.0f, 548.0f);

//animate the 2 subviews that were just added; "PRESENTER"'S FRAME IS THE ISSUE
[UIView animateWithDuration:25.3f delay:0.0f options:nil animations:^{
[menuTemp setFrame:CGRectMake(0.0f, 0.0f, 260.0f, 548.0f)];
[presenter setFrame:CGRectMake(260.0f, -20.0/* or 0 */f, 320.0f, 548.0f)];
} completion:nil];

}];
}

这是我的两个选项的图示(单击以获得更高分辨率): visual

屏幕 1) 第一个屏幕显示单击菜单按钮之前的 View 。

随着菜单转换动画的开始,接下来的两个屏幕显示了两种可能性。

屏幕 2) 这是我将 presenter.frame.y.min 设置为 -20 时的过渡效果。如您所见, View 中的按钮向上跳了 20 像素。

屏幕 3) 这是我将 presenter.frame.y.min 设置为 0 时的过渡效果。如您所见,顶部有一个 20 像素高的条。蓝色表示容器 View 。

最佳答案

前段时间我遇到了这个问题,当时我没有正确创建我的 View Controller 树。我的 20px 关闭是由于将 UINavigationController View 添加为 subview 造成的。那一年,我在 WWDC 的实验室与 Apple 工程师进行了交谈。他们说我错误地使用了导航 Controller ,它需要是顶级结构,你不应该把它放在另一个 UIViewController 中。也就是说,您可以将它们放在容器 View Controller 中,例如 UITabBarControllerUISplitViewController

您的问题不在您发布的代码中,而是在您的 View Controller 的体系结构中。我已将示例应用程序上传到 GitHub,展示如何创建“幻灯片菜单”应用程序,如 FaceBook 和 StackOverflow iPhone 应用程序。参见 https://github.com/GayleDDS/TestNavBarOffBy20.git

示例应用在 Root View Controller 中使用带有容器 View 的 Storyboard来管理 UINavigationController(主视图)和 UITableViewController(菜单 View )。

Storyboard

Main View现在显示菜单 Slide for Menu

有关创建详细信息,请参阅提交消息 cfb2efc。我从 Single View Application 模板开始,您需要添加 QuartzCore 框架。

关于ios - 添加 subview myNavigationController.view 时关闭 20 像素(y 轴),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16601370/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com