因为在iOS 11中导航的结构体系发生了变化,请看下面的结构
屏幕快照 2018-02-10 下午12.07.21.png
在4.0
的尺寸下,第一个rightNavigationItem
与屏幕左边缘会有一个16
的约束值,当然右边的约束值为-16
;5.5
的尺寸下约束值为20(-20)
。所以可以通过修改这个约束值,来修改navigationItem
与左右屏幕边缘之间的间距值。
如下代码
UIView *bgView = [[UIView alloc]initWithFrame:CGRectMake(0, 0, 90, 44)];
bgView.backgroundColor = [UIColor redColor];
[bgView addGestureRecognizer:[UITapGestureRecognizer mm_gestureRecognizerWithActionBlock:^(id gestureRecognizer) {
[self.navigationController popViewControllerAnimated:YES];
}]];
bgView.userInteractionEnabled = YES;
UIBarButtonItem *backItem = [[UIBarButtonItem alloc] initWithCustomView:bgView];
self.navigationItem.rightBarButtonItems = @[backItem];
-(void)viewDidLayoutSubviews{
if (@available(iOS 11.0,*)){
UINavigationItem * item=self.navigationItem;
NSArray * array=item.rightBarButtonItems;
if (array&&array.count!=0){
UIBarButtonItem * buttonItem=array.firstObject;
UIView * view =buttonItem.customView.superview.superview.superview;
NSArray * arrayConstraint=view.constraints;
for (NSLayoutConstraint * constant in arrayConstraint) {
if (fabs(constant.constant) ==16 || fabs(constant.constant) ==20) {
constant.constant=-1;//修改这个值来改变间距
}
}
}
}
}
如上,我们通过修改constant.constant
的值来修改改变间距值。
请看下面的效果图
代码不足的地方 ,还请多多指教。
网友评论