标签: uinavigationcontroller

IOS7中的状态栏和导航栏问题

我正在将我的应用程序迁移到iOS 7.为了处理状态栏问题,我添加了此代码

if([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0f)
{
    CGRect frame = self.navigationController.view.frame;
    if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)
    {
        frame.origin.y = 20;
    }
    else
    {
        frame.origin.x = 20;
    }
    [self.navigationController.view setFrame:frame];
}
Run Code Online (Sandbox Code Playgroud)

这在正常情况下工作正常.如果我正在更改方向(应用程序仅支持横向方向)或呈现任何视图控制器并关闭模型视图控制器,我的视图控制器对齐方式已更改.状态栏再次与我的视图控制器重叠.这段代码根本不起作用.请指导我修复此状态栏问题.

案例2:这就是我呈现视图控制器的方式

ZBarReaderViewController *reader = [ZBarReaderViewController new];
reader.readerDelegate = self;

if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
    reader.supportedOrientationsMask = ZBarOrientationMaskLandscape;
else
    reader.supportedOrientationsMask = ZBarOrientationMaskPortrait;

    [self presentModalViewController:reader animated:YES];
Run Code Online (Sandbox Code Playgroud)

参考:

在此输入图像描述

提前致谢.

uinavigationcontroller ipad ios ios7

57
推荐指数
3
解决办法
8万
查看次数

用于推送UIViewController的自定义动画

我想在推送视图控制器时显示自定义动画:我希望实现像"扩展"动画这样的东西,这意味着新视图从给定的矩形扩展,让动画期间[100,100 220,380]全屏显示.

任何建议从哪里开始,分别是任何文档,教程,链接?:)


好的.我可以使用以下代码制作展开动画:

if ([coming.view superview] == nil)   
    [self.view addSubview:coming.view];
    coming.view.frame = CGRectMake(160,160,0,0);
    [UIView beginAnimations:@"frame" context:nil];
    [UIView setAnimationDuration:4];
    [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
    [coming viewWillAppear:YES];
    [going viewWillAppear:YES];
    coming.view.frame = CGRectMake(0, 0, 320, 480);
    [going viewDidDisappear:YES];
    [coming viewDidAppear:YES];
    [UIView commitAnimations];
Run Code Online (Sandbox Code Playgroud)

我的视图已正确显示,但遗憾的是导航栏未更新.有没有办法手动完成?


在示例代码中,一个函数被称为0.03秒,用于更新视图的转换.不幸的是,当推动一个时UIViewController,我无法调整视图的框架...我是吗?

iphone animation uiviewcontroller uikit uinavigationcontroller

55
推荐指数
4
解决办法
7万
查看次数

选中时,选中的UItableViewCell保持蓝色

当用户选择UITableView行后推送视图时,该行将获得蓝色突出显示,然后出现新视图.没关系.但当我"回"时,行仍然以蓝色突出显示.这是我的didSelectRowAtIndexPath代码.

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    SettingsViewController *controller = [[SettingsViewController alloc] initWithNibName:@"SettingsView" bundle:nil];
    [[self navigationController] pushViewController:controller animated:YES];
    [controller release], controller = nil; 
}
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

iphone objective-c uitableview uinavigationcontroller

55
推荐指数
3
解决办法
3万
查看次数

获得最顶级的UIViewController

如果我推动视图控制器和/或提供模态视图控制器UINavigationController,我怎样才能找出最顶层的UIViewController?或者在我的情况下,我想知道某个UITableViewController是否是最重要的.

我试过用:

self.navigationController.topViewController == self
Run Code Online (Sandbox Code Playgroud)

......但这不起作用.我猜测它失败了,因为我在它上面呈现模态视图控制器,并且topViewController只跟踪推送了哪些视图UINavigationController(而不是那些以模态方式呈现的视图).

cocoa-touch objective-c uiviewcontroller uinavigationcontroller

55
推荐指数
2
解决办法
4万
查看次数

如何以编程方式按下UINavigationController中的"后退"按钮

我有一个UIViewControllerFriendsViewController里面的UINavigationController.第二个UIViewControllerFriendsDetailedViewController.当从第一个视图控制器导航到第二个视图控制器时,我想Back在需要时以编程方式按下按钮.这该怎么做?

iphone objective-c uiviewcontroller uinavigationcontroller ios

55
推荐指数
3
解决办法
3万
查看次数

UINavigationBar多行标题

是否有一种直接的方法来覆盖导航控制器中导航栏中当前导航栏项目的titleView?我已经尝试创建一个新的UIView并用我自己的UIVIew替换topView的titleView属性但没有成功.

基本上,我想要导航栏标题的多行标题.有什么建议?

title uinavigationbar uinavigationcontroller uilabel uinavigationitem

54
推荐指数
5
解决办法
4万
查看次数

iOS如何在弹出顶视图控制器时以编程方式检测?

假设我有一个带有2个视图控制器的导航控制器堆栈:VC2位于顶部,VC1位于底层.我可以在VC1中包含哪些代码来检测VC2刚刚从堆栈中弹出?

由于我试图从VC1的代码中检测到VC2的弹出,似乎像viewWillAppearviewDidAppear这样的东西不起作用,因为这些方法每次显示VC1时都会触发,包括它首次被推入堆栈时.

编辑:我原来的问题似乎不太清楚.这是我正在尝试做的事情:确定VC1何时显示是由于VC2从堆栈顶部弹出.这是我不想做的事情:确定VC1由于被推到堆栈顶部而显示的时间.我需要某种方法来检测第一个动作但不是第二个动作.

注意:我并不特别关心VC2,它可以是从堆栈弹出的任何数量的其他VC,我关心的是当VC1再次成为堆栈顶部时由于其他一些VC开始弹出最佳.

stack uinavigationcontroller ios

52
推荐指数
5
解决办法
4万
查看次数

不支持推送导航控制器

在我的MainStoryBoard中,我想将viewController推送到detailView,但是我收到此错误:

NSInvalidArgumentException',原因:'不支持推送导航控制器'

我在故事板上为viewController设置了标识符'JSA'ID.

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (indexPath.row == 0) {
        SWSJSAViewController *viewController = [[UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil] instantiateViewControllerWithIdentifier:@"JSA"];
        [self.navigationController pushViewController:viewController animated:YES];
    }
}
Run Code Online (Sandbox Code Playgroud)

objective-c storyboard uinavigationcontroller ios swift

52
推荐指数
2
解决办法
5万
查看次数

显示/隐藏带有平滑动画的导航栏

我有一个基于导航的应用程序.第一个视图(rootcontroller)仅以三个大按钮开头.没有导航栏.从那里,其他一切都是tableviews和导航栏.我这样做是为了显示/隐藏导航栏:

MyAppAppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];
appDelegate.navigationController.navigationBar.hidden = NO;
Run Code Online (Sandbox Code Playgroud)

一旦我离开根控制器,导航栏就会猛拉到位并放在桌面视图的顶部,而不是将其向下推.它剪辑了tableview的顶部.回到根控制器并不是导航栏消失的方式.是否有更顺畅/更好的方法来完成隐藏根控制器的导航栏?

iphone cocoa-touch objective-c uinavigationcontroller

51
推荐指数
2
解决办法
4万
查看次数

NSGenericException',原因:'推送segues只能在源控制器由UINavigationController实例管理时使用

所以我正在制作一个带有5个视图控制器的应用程序,第一个嵌入在UINavigationController中,前4个视图控制器之间的segue工作正常.然而,引入第五个视图控制器已经破坏了这一点,我收到了错误

Terminating app due to uncaught exception 'NSGenericException', reason: 'Push segues can only be used when the source controller is managed by an instance of UINavigationController.'
Run Code Online (Sandbox Code Playgroud)

我没有做任何与这个第五视图控制器不同的东西,它只是一个带有图像视图和标签的标准ViewController,我的所有segue都是通过故事板中的ctrl拖动按钮来调用的.有没有人知道这是什么造成的?

谢谢

iphone uinavigationcontroller ios segue

51
推荐指数
3
解决办法
4万
查看次数