我在iOS 11中发现了一个UINavigationBar
错误。通过使用self.navigationItem.rightBarButtonItems = @[fixSpaceItem, item]
在viewDidLoad中完全设置导航项按钮。并使用手势弹出,但我并没有真正回弹,当回弹开始时,我释放手指并让视图控制器取消弹出,然后右导航按钮项消失。左边的项目按钮有同样的问题。要重现此错误,您必须添加fixSpaceItem,如[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target:nil action:nil]
。而真正的设备,但不是模拟器可以重现错误。 这里是我的主要代码:如何处理iOS 11导航BarButtonItems错误?
- (void)viewDidLoad {
[super viewDidLoad];
self.navigationController.interactivePopGestureRecognizer.enabled = YES;
self.navigationController.interactivePopGestureRecognizer.delegate = self;
self.navigationItem.rightBarButtonItems = @[[self negativeSpacerWithWidth:5],[self rightButton]];
self.navigationItem.leftBarButtonItems = @[[self negativeSpacerWithWidth:5], [self leftButton]];
}
- (UIBarButtonItem *)leftButton {
UIButton *button = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 35, 35)];
[button setImage:[UIImage imageNamed:@"icon_app_back_normal"] forState:UIControlStateNormal];
[button addTarget:self action:@selector(back) forControlEvents:UIControlEventTouchUpInside];
UIBarButtonItem *item = [[UIBarButtonItem alloc] initWithCustomView:button];
return item;
}
- (UIBarButtonItem *)rightButton {
UIButton *button = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 35, 35)];
[button setImage:[UIImage imageNamed:@"setting"] forState:UIControlStateNormal];
UIBarButtonItem *item = [[UIBarButtonItem alloc] initWithCustomView:button];
return item;
}
- (UIBarButtonItem *)negativeSpacerWithWidth:(CGFloat)width {
UIBarButtonItem *spacer = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target:nil action:nil];
[spacer setWidth:width];
return spacer;
}
我看到了同样的,即使没有固定的空间。在我的情况下,导航栏会更新到您要弹出的视图控制器的导航项目,但是在取消弹出式中间手势时决不会还原到当前视图控制器导航项目。希望它在下一个测试版中被清除。 –