iOS:过渡时LeftBarButtonItem上的怪异叠加

时间:2018-06-29 13:46:21

标签: ios objective-c xcode uinavigationcontroller uibutton

在使用iOS的{​​{1}}项目中使用导航栏有点麻烦。

我有一些视图控制器,它们由objective-c管理,层次结构为1-2-3。

对于navigationviewcontroller 2和3,我在Viewcontrollers函数中定义了自定义后退按钮,因为在触摸它们时需要为其分配更复杂的逻辑。这就是为什么我没有在上一个视图控制器中设置后退按钮的原因。

一切工作都很好,我的唯一问题是,在从一个视图切换到另一个视图时,返回按钮的箭头会被导航栏背景颜色的一点视图覆盖,直至达到50%,然后在过渡完成后消失。

我使用此功能在导航栏中创建后退按钮,该功能在viewWillAppear中被调用:

viewWillAppear

我希望也许有人对我有好提示!谢谢!

2 个答案:

答案 0 :(得分:0)

尝试将自定义按钮初始化移至viewDidLoad方法。

答案 1 :(得分:0)

经过长时间的尝试,我终于设法自己解决了这个问题。 因此,基本上,当我创建leftBarButton时,按钮不是从左边缘开始,而是在左边缘有一些空间。现在,当我用负插图插入按钮图像时,该图像基本上将在按钮框之外。然后在过渡时将这部分奇怪地覆盖。

要解决此问题,我仅向我的leftBarButtonItems添加了另一个UIBarButtonItem。尽管我不太清楚为什么会这样,但这似乎为我解决了这个问题。 另外,我认为navigationBar中的leftBarButton并非完全从边缘开始,但是在边缘有一个空格是很奇怪的,我必须插入我的图像才能获得与图像完全相同的位置,因为默认的后退按钮具有。

我用于创建自定义后退按钮的新代码现在如下所示:

- (void)setupCustomBackButton:(NSString *)title
                   action:(SEL)action
              buttonFrame:(CGRect)buttonFrame {

UIButton *backButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
backButton.frame = buttonFrame;
[backButton setImage:[UIImage imageNamed:@"customBackArrow"] forState:UIControlStateNormal];
backButton.imageEdgeInsets = UIEdgeInsetsMake(0.0f, -8.0f, 0.0f, 0.0f);
[backButton setTitle:title forState:UIControlStateNormal];
[backButton.titleLabel setFont:[UIFont systemFontOfSize:17.0]];
backButton.titleEdgeInsets = UIEdgeInsetsMake(0.0f, -3.0f, 0.0f, 0.0f);
[backButton setContentHorizontalAlignment:UIControlContentHorizontalAlignmentLeft];
[backButton addTarget:self action:action forControlEvents:UIControlEventTouchUpInside];
UIBarButtonItem *barButton = [[UIBarButtonItem alloc] initWithCustomView:backButton];

UIBarButtonItem *negativeSpacer = [[UIBarButtonItem alloc]
                                   initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace
                                   target:nil action:nil];

self.navigationItem.leftBarButtonItem = nil;
[self.navigationItem setLeftBarButtonItems:[NSArray arrayWithObjects:negativeSpacer,barButton, nil] animated:NO];
}

谢谢大家,我希望我的回答也对其他人有帮助!