0

我正在开发一个应用程序。我需要减小 UINavigationBar 的大小,为此我使用下面的代码。

CGFloat navBarHeight = 10.0f;    
CGRect frame = CGRectMake(50.0f, 0.0f, 320.0f, navBarHeight);
[self.navigationController.navigationBar setFrame:frame];

但是当我转到下一页时,该页面导航栏也发生了变化。但我只需要更改一页。我想将后退按钮分开并放置在导航栏之前。因此,我在 UINavigationBar 之前放置了一个按钮。但我不执行它的操作。

所以请告诉我如何做到这一点。

提前致谢...

4

2 回答 2

0

您需要注意的是导航控制器管理整个视图层次结构。当您拥有 ViewControllerA 时,您可以在其中更改导航控制器高度的导航栏,然后将 ViewControllerB 推送到该导航控制器的堆栈上,您实际上是在查看同一个导航栏。您需要将高度更改回 ViewControllerB 中的原始高度。

我不确定您所说的“将后退按钮分开并放置在导航栏之前”是什么意思。你有图片或者你能澄清这个问题吗?

更新:根据您的评论,您尝试实现的目标是可能的,但这是一个坏主意。UINavigationController 的 navigationBar 横跨屏幕的整个宽度。无论缩短此栏的宽度以将您的按钮显示在其左侧的技术可行性如何,这都可以说违反了 HIG,这需要标准使用标准 iOS 功能;即导航栏应始终跨越设备在任一方向的宽度。如果您想用不同的按钮替换标准的后退按钮,只需替换 leftNavigationItem 即可,即

self.navigationItem.leftNavigationItem = <SomeUIBarButtonItem>;

您可能还想设置 hidesBackButton = YES。

更新 2:我在一个小型 Xcode 项目中对此进行了测试,您可以更改导航栏的宽度。这看起来很愚蠢,但这是可能的。但是,如果您使用笔尖并在该笔尖上设置 NavigationBar 属性,则当您将按钮添加到视图控制器的视图时,您必须将框架的 y 值设置为负数以使其与导航栏一致. 即使如此,在此按钮上设置文本或目标/操作似乎也不起作用。导航栏可能会为自己保留该宽度。从笔尖中删除导航栏设置并再次尝试仍然没有这样做。导航栏(或者,很可能是导航控制器)的存在似乎阻止了其他任何东西在该区域接收触摸事件。

于 2012-04-06T12:17:22.880 回答
0

您需要更改每个页面中 UINavigation 栏的大小。关于返回按钮,我使用了这个解决方案:

-(void)returnButton:(id)sender
{
    [self.navigationController popToRootViewControllerAnimated:YES];
}
于 2012-04-06T12:13:27.590 回答