【发布时间】: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