【问题标题】:navigation menu not at full width of screen导航菜单不在屏幕全宽
【发布时间】:2015-05-23 14:25:15
【问题描述】:

我正在为 iOS 8 编写目标 C 中的应用程序,我的导航栏有一个恼人的边距,这导致它向右移动 ~20 像素的 leftBarButtonItem 和 ~20 像素的 rightBarButtonItem,如图所示以下。我曾尝试在其他一些帖子中使用负间隔,但无济于事。有任何想法吗?

(我试图在不使用情节提要或 xib 的情况下做到这一点。)

代码如下:

UIToolbar* toolbar_temp = [[UIToolbar alloc] init];
toolbar_temp.frame = CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, 45);
toolbar_temp.barTintColor= [UIColor blackColor];

NSMutableArray *items = [[NSMutableArray alloc] init];
UIBarButtonItem *spaceItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil];

UIImage *camimage = [UIImage imageNamed:@"cancel"];
UIBarButtonItem *customItem = [[UIBarButtonItem alloc] initWithImage:camimage style:UIBarButtonItemStylePlain    target:self     action:nil];

[items addObject:spaceItem ];
[items addObject:customItem ];
[items addObject:spaceItem ];

[toolbar_temp setItems:items animated:NO];
UIBarButtonItem *allButton = [[UIBarButtonItem alloc] initWithCustomView:toolbar_temp];
self.navigationItem.leftBarButtonItem = allButton;

编辑: 我不确定这是否给出了任何提示,但由于某种原因,这可行:

[[UINavigationBar appearance] setBarStyle:UIBarStyleBlackTranslucent];

虽然不是这样:

[self.navigationController.navigationBar setBarStyle:UIBarStyleBlackTranslucent];

解决方案: 我最终自己找到了解决方案。问题是我有一个标签栏控制器,它有一个导航控制器作为视图之一。导航控制器只能在 viewDidload 中设置,不会在标签栏控制器中调用。解决方案是添加 viewDidAppear 并在该函数中添加导航控制器。

- (void)viewDidAppear:(BOOL)animated{[self addToolbar];}

感谢大家的帮助!

【问题讨论】:

  • 添加到哪个视图?
  • 该应用程序是一个选项卡式视图控制器,这是设置为导航控制器的第一个视图。当我尝试调试时,我将其设置为常规工具栏而不是导航工具栏,并且效果很好。 (如果这有帮助的话。)
  • 我想看看您如何将 UIToolbar 添加到您的视图中。我认为您可能需要隐藏导航控制器附带的默认项,或者将条形按钮项直接添加到默认项而不是添加工具栏。也许如果你展示更多的设置,我们可以发现奇怪的 20px 是从哪里来的。
  • 好的,所以我做了更多的调试。我正在通过使用“initWithNibName”进行初始化来设置标签栏项目的图像。当我这样做时,我似乎无法正确设置导航栏中的项目,但我可以正确初始化标签栏项目。为了使它更加混乱,如果我没有“initWithNibName”,我可以正确初始化导航栏——在这种情况下,viewdidload 被调用并且导航项应该是它们应该的,但是我的标签栏项没有正确初始化。这是否有足够的帮助,还是我应该发布更多代码?

标签: objective-c iphone ios8


【解决方案1】:

您似乎无法更改minimum margins。你可以做的是将toolbar_temp添加到导航栏:

[self.navigationController.navigationBar addSubview:toolbar_temp];

或者添加到self.view中:

self.navigationController.navigationBarHidden = YES;
[self.view addSubview:toolbar_temp];

【讨论】:

  • 感谢您的想法,但没有骰子 =/
猜你喜欢
  • 1970-01-01
  • 2017-11-28
  • 1970-01-01
  • 2019-03-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多