如何自定义 UINavigationController?

Posted

技术标签:

【中文标题】如何自定义 UINavigationController?【英文标题】:How to Custom UINavigationController? 【发布时间】:2013-08-14 07:19:48 【问题描述】:

我有这样的设计目标:

问题是,UIButton valign 不能在中心位置,UIButton 总是相对于UINavigationController 像这样:

如何使UIButton在背景图像中心的高度不是UINavigationController高度?

【问题讨论】:

请更新您的问题以正确显示图像而不是描述。 显示您用于该按钮的代码 您是将此按钮用作条形按钮还是添加为子视图?? 您想在导航栏或视图上添加按钮? 【参考方案1】:
 self.btnBack = [UIButton buttonWithType:UIButtonTypeCustom];
[self.btnBack setImage:[UIImage imageNamed:@"back_active.png"] forState:UIControlStateNormal];
[self.btnBack addTarget:self action:@selector(back) forControlEvents:UIControlEventTouchUpInside];
self.btnBack.frame = CGRectMake(5, 9, 50, 30);
[self.navigationController.navigationBar addSubview:self.btnBack];

也检查一下link。

更新:返回按钮

-(void)back


[self.btnBack removeFromSuperview];
[self.navigationController popViewControllerAnimated animated:NO];

【讨论】:

【参考方案2】:

首先创建自定义按钮,然后在导航控制器中添加子视图:-

UIButton * headerButton = [UIButton buttonWithType:UIButtonTypeCustom];  
[headerButton addTarget:self action:@selector(headerButton1Action:) forControlEvents:UIControlEventTouchUpInside];
headerButton.frame = CGRectMake(95, 1, 30,38 );
[headerButton setImage:[UIImage imageNamed:@"header-icon"] forState:UIControlStateNormal];
[headerButton setImage:[UIImage imageNamed:@"header-icon-pressed"] forState:UIControlStateSelected];

[self.navigationController.navigationBar addSubview:headerButton];

我希望这会对你有所帮助。 快乐编码...

【讨论】:

【参考方案3】:

这是一个很好的快速解决方案

myButton.titleLabel.font = [UIFont fontWithName:@"FontName" size:20.0];   
myButton.contentEdgeInsets = UIEdgeInsetsMake(3.0, 0.0, 0.0, 0.0);

并隐藏您的导航栏

[self.navigationController setNavigationBarHidden:YES];

然后显示您的自定义视图

【讨论】:

我试试你的代码,它的工作我的 UIButton 位置现在是正确的。但我遇到了另一个问题,我的状态位置与 UIButton 位置不同。如何解决这个问题,谢谢。【参考方案4】:

有诀窍,

您可以使用 [self.navigationController setNavigationBarHidden:YES]; 隐藏 navigationController

并根据需要在顶部显示自定义视图。

【讨论】:

【参考方案5】:

由于导航栏高度,您面临的问题。现在有两种方法。您可以为导航栏创建一个类别并覆盖 -(CGRect)sizethatFits 方法,如下所示: - (CGSize)sizeThatFits:(CGSize)size CGSize newSize = CGSizeMake(320,100); 返回新尺寸;

或者您可以隐藏导航栏,例如: [self.navigationController setNavigationBarHidden:YES]; 并放置一个标题视图并处理它。

做你想做的事..

【讨论】:

以上是关于如何自定义 UINavigationController?的主要内容,如果未能解决你的问题,请参考以下文章

使 uipagecontrol 动画看起来像 uinavigationcontrol 动画

easyUI如何增加自定义的图标

代码调试篇:如何编写 gdb 自定义命令

代码调试篇:如何编写 gdb 自定义命令

如何自定义自己的IP地址

如何自定义Android Dialog的样式?