Tag: uinavigationcontroller

如何在UINavigationBar下面添加一个视图

好的,在iOS私密类深入深渊和最终可重用代码的讨伐之间有一条细微的界限。 我想在UINavigationBar下面有一个大约40像素高的任意UIView。 现在,通常这可以扔在封闭的视图,但我想这个UIView 留在UINavigationBar。 所以当用户钻入不同的视图时,导航栏下方的UIView将保持不变。 我已经尝试构build一个容器UIViewController,它将作为RootViewController放置在UINavigationController中,但这不起作用,因为当用户按下一个新视图时,我的容器视图被滑出,并且我的持续性栏随它而去。 如果我把一个UINavigationController放进一个UIViewController里面,比我能覆盖的UIView栏,但内部的意见似乎仍然不会改变他们的框架的正确,以及当一个视图被推或popup导航堆栈,由于UINavigationController不知道他们在屏幕下方的新的Y位置,所以animation效果不佳(改变它们的Y位置以及离开屏幕)。 所以,我研究了UINavigationController的子类。 我知道,它说“ 这个类不适用于子类 ”,但总是有例外。 这个子类可以简单地在导航栏下面添加持久的UIView,调整内容部分的大小(正常视图将出现在哪里),一切都将正常工作。 但是在玩了ObjC运行时类之后,我找不到需要调整的魔术variables(UINavigationController的_containerView就是这样一个variables)。 什么是最好的方法来做到这一点? 有没有比复制和粘贴代码更好的方法,使这个酒吧进入所有的ViewControllers将显示它?

iOS内存警告发送到解除分配的UIViewController

我有奇怪的行为。 我的应用程序正在使用UINavigationController启动。 如果我推视图控制器ANavigationController ,回去模拟内存警告一切正常。 如果我以相同的方式推动相同的视图控制器( ANavigationController ),请返回并模拟内存警告 – 应用程序崩溃,错误: [ANavigationController retain] :发送到释放实例的消息。 在debugging时,我打印了推送控制器的地址并释放了一个地址: 在第一个推送控制器地址是0xDA724F0 。 如果我回去模拟记忆警告 – 一切都好。 调用地址为0xDA724F0第二个push- –dealloc方法。 新推控制器地址是0xFA720F0 。 回去并模拟内存警告崩溃与错误: [ANavigationController retain] :发送到解除分配的实例0xDA724F0消息。 为什么释放控制器(在步骤4)根本得到内存警告信息? 编辑 我正在使用ARC。 编辑 运行仪器来testing分配和启用NSZombie我在预期的地方崩溃,但是在UIkit库和负责调用者报告的-1引用计数是: + [UIViewController _traverseViewControllerHierarchyWithDelayedReleaseArray:block:]

在Swift之后出现在导航栏下方的灰色条

当我继续到特定的VC时,我的导航栏下方会出现一个与我的导航栏+状态栏大小完全相同的灰色条。 在另一个VC中,灰色条不在那里,除非我打开Youtube,然后使用iOS 9“回到”App“button。 这是它的样子: 正如你从图片中可以看到的那样,灰色条并没有覆盖YTPlayerView,而是将其推倒。 这里发生了什么? 编辑 为了清晰,我添加了视图层次结构。 编辑 我添加了有关YTPlayerView的约束。 编辑 约束顶部布局指南是0

我如何做到这一点,如果我淡出我的导航栏,然后实际上隐藏它的程序,如果我撤消这没有时间问题?

长话短说,我有一个视图控制器,用户可以点击self.view (除了导航栏之外的任何地方),它将进入全屏模式,底部的控件淡出,导航和状态栏淡出。 类似于iBooks。 我可以简单地淡化导航栏的alpha,但是为了让用户能够在新获得的区域(导航栏现在已经淡出)中点击,并且让它做一些事情,我不得不做更多的事情,阿尔法,因为导航栏仍然在技术上占据领域。 所以我用[self.navigationController setNavigationBarHidden:YES animated:NO];隐藏导航栏[self.navigationController setNavigationBarHidden:YES animated:NO]; 。 在animation块结束后我必须这样做,否则它将在animation块中并作为块的一部分进行animation处理。 所以我使用dispatch_after在animation完成后(0.35秒延迟)完成。 然而,这导致如果用户在0.35秒的时间段内在任何时间点击animation并且等待完成的事件,那么引起另一个块开始时的瑕疵行为,即使对于另一个块仍然等待0.35秒完成。 它会导致一些不好的行为,并导致导航栏保持隐藏状态。 毛。 它发生的video: http : //cl.ly/2i3H0k0Q1T0V 这是我的代码来演示我在做什么: – (void)hideControls:(BOOL)hidden { self.navigationController.view.backgroundColor = self.view.backgroundColor; int statusBarHeight = [UIApplication sharedApplication].statusBarFrame.size.height; [UIView animateWithDuration:0.35 animations:^{ [[UIApplication sharedApplication] setStatusBarHidden:hidden withAnimation:UIStatusBarAnimationFade]; if (hidden) { self.navigationController.navigationBar.alpha = 0.0; self.instructionsLabel.alpha = 0.0; self.backFiftyWordsButton.alpha = 0.0; self.forwardFiftyWordsButton.alpha = 0.0; self.WPMLabel.alpha = […]

如何返回导航堆栈?

我的应用程序有7个后续视图控制器:VC1 – VC7 在我的导航栏中,我有一个后退button,可以执行操作:tapped和longPressed。 当在任何VC中按下backButton时,应用程序应该转到VC2并将其显示为如同用户从VC1到VC2一样,具体来说就是:用右后退button轻击操作。 这是我的代码UILongPressGestureRecognizer: func longPressAction(gestureRecognizer: UIGestureRecognizer) { if (gestureRecognizer.state == UIGestureRecognizerState.Ended) { println("Long press ended") } else if (gestureRecognizer.state == UIGestureRecognizerState.Began) { println("Long press detected") let mainStoryboard = UIStoryboard(name: "Main", bundle: NSBundle.mainBundle()) let vc: ViewController2 = mainStoryboard.instantiateViewControllerWithIdentifier("vc2") as! ViewController2 navigationController?.pushViewController(vc, animated: true) } } 我怎样才能回到导航堆栈的正确位置?

tableView didSelectRowAtIndexPath在iOS 7上无法正常工作。为什么?

首先,我想说我只是提出这个问题,因为我想了解发生了什么。 我在Xcode5上全新安装了一个旧的Xcode项目(一个非常简单的项目)。 当我意识到它不适用于iOS 7.为什么? 不知道.. 我看到其他一些问题,没有得到任何有用的答案,所以我做了一个简单的testing。 在UITableViewController除了didSelectRowAtIndexPath之外,所有工作都正常 一探究竟 RootViewController.h: @interface RootViewController : UITableViewController @property (strong, nonatomic) NSMutableArray *items; @end RootViewController.m在viewDidLoad我初始化数组(有一些string)。 实现dataSource和委托方法(是的,我把委托和数据源设置为tableView) – (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { return 1; } – (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { return [_items count]; } – (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *CellIdentifier = @"Cell"; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; if […]

如何使UINavigationBar背景透明?

首先,我已经看到了如何在iOS 8中使UINavigationBar透明的所有答案? 透明UINavigationBar并使UINavigationBar透明 。 他们似乎没有为我工作。 我常规的视图控制器(试图使导航栏透明之前)没有任何问题: 我正在使用(尝试在viewDidLoad和viewWillAppear: : [self.navigationController.navigationBar setBackgroundImage:[UIImage new] forBarMetrics:UIBarMetricsDefault]; self.navigationController.navigationBar.shadowImage = [UIImage new]; self.navigationController.navigationBar.translucent = YES; self.navigationController.view.backgroundColor = [UIColor clearColor]; 我得到这个: 灰色状态栏背景,完全白色的导航栏不与状态栏混合,然后视图开始。 在其他问题“答案”中的所有“解决scheme”对我来说都会产生相同的结果。 我也试过设置self.edgesForExtendedLayout = UIRectEdgeNone; 或self.edgesForExtendedLayout = UIRectEdgeAll; 但这也没有任何影响。 我怎样才能使我的导航栏透明而不会搞乱一切? 更新:继瓦里夫·阿赫德·里希的回答后,我改变了self.navigationController.view.backgroundColor = [UIColor clearColor]; to self.navigationController.navigationBar.backgroundColor = [UIColor clearColor]; ,现在我得到一个灰色,统一的状态/导航条,但仍然不透明: 更新2:我已经连接了视图debugging器,而且灰色背景似乎来自视图层次结构的深层,而我的视图的内容并没有扩展。 我试过self.edgesForExtendedLayout = UIRectEdgeAll; 再次与最新的代码,但仍然无济于事:

所有UI前面的透明UIImageView

第一次启动我的应用程序后,我想向用户展示一个小教程,以解释我的应用程序的function。 所以我需要设置一个透明的UIImageView有一些箭头和标签,其中主要的用户界面(更具体地说,在tabbarcontroler navigationviewcontroller中的tableviewcontroller)在教程图像后面仍然可见。 而且,由于教程由多个图像组成,我想添加一个轻敲手势,将切换到另一个图像。 我只是试图添加一个UIImageView到我的tabbarcontroller,并为此添加了一个手势识别器,但是它不会对我的水龙头做出反应,它只是起作用,就像没有ImageView – select表中的鱼子一样,按下button。 -(void)nextTap:(UIGestureRecognizer*)nextTap { //Show another image } -(void)showTutorial { NSLog(@"Show tutorial"); UIImageView *tutorialImage = [[UIImageView alloc]initWithImage:[UIImage imageNamed:@"BG"]]; [self.navigationController.tabBarController.view addSubview:tutorialImage]; UITapGestureRecognizer *nextTap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(nextTap:)]; [tutorialImage addGestureRecognizer:nextTap]; } 有谁可以告诉我,我应该在哪里添加我的视图,而不是为了正常工作?

为什么使用setViewController从UINavigationController的导航栏中删除所有内容?

这是问题。 我在UINavigationController使用下面的代码来交换rootViewController 。 我需要能够在多个不同的屏幕之间交换rootViewController ,并允许用户从每个屏幕下钻(这显然是为什么我需要Nav控制器): SomeViewController *tmp = [[SomeViewController alloc] initWithNibName:@"SomeViewController" bundle:nil]; NSArray * viewControllers = [self viewControllers]; NSArray * newViewControllers = [NSArray arrayWithObjects:tmp, nil]; [self setViewControllers:newViewControllers]; 现在,在阅读UINavigationController的类引用时,我看到对于“viewControllers”属性,它说:“根视图控制器在数组的索引0处,后视图控制器在索引n-2处,顶部控制器是索引n-1,其中n是数组中的项目数。 当我打印一个我的viewControllers数组在那里,我得到1,当前rootViewController。 顶部控制器(我认为是导航栏)中是否应该没有内容? 只要我用新的视图setViewControllers ,我的导航栏中的一切消失。 我将补充说我有一个左右button以及一个自定义标题button,它们都被初始化,并被添加到init方法的导航栏中,一直工作正常,直到它们消失在我身上。 任何帮助将不胜感激。

导航控制器显示黑屏

我正在学习iOS开发,并遇到了导航控制器的一些问题。 我创build了一个SingleView应用程序,然后使用“embedded导航控制器”来获得导航控件。 我遇到的问题是,应用程序成功build立后,只有导航栏是可见的,其他UI组件只是纯黑色。 我已经试过真正的设备,清理/重build,删除应用程序和重新构build,都得到了相同的结果。 以下是截图: 故事板的屏幕截图: 当导航控制器被点击时: 我已经尝试更新约束和框架,所以没有琥珀色三angular警告。 “初始视图控制器”已经打勾。 码: AppDelegate.m #import "AppDelegate.h" @implementation AppDelegate – (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // Override point for customization after application launch. return YES; } – (void)applicationWillResignActive:(UIApplication *)application { // Sent when the application is about to move from active to inactive state. This can occur for certain […]