欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

iOS 11 UINavigationItem 去除左右间隙的方法

程序员文章站 2023-12-20 15:26:04
前言 ios 11版本由于对于nav层级结构的改变,导致以前的方法无法达到理想的移动效果,使顶部的按钮完全靠左,或者是靠右. 修改思路 在ios11之前保持原有方式进...

前言

ios 11版本由于对于nav层级结构的改变,导致以前的方法无法达到理想的移动效果,使顶部的按钮完全靠左,或者是靠右.

修改思路

在ios11之前保持原有方式进行设置,ios11之后进行额外的边距约束修改达到移动效果.

从viewdebug的界面上观察可以看到需要将uibuttonbarstackview距离左边和右边的16的约束改为0即可.

iOS 11 UINavigationItem 去除左右间隙的方法

核心代码

配置导航器view代码

//0:leftbarbuttonitems,1:rightbarbuttonitems
- (void)initbaritem:(uiview*)view withtype:(int)type{
  uibarbuttonitem * buttonitem = [[uibarbuttonitem alloc]initwithcustomview:view];
  //解决按钮不靠左 靠右的问题.ios 11系统需要单独处理
  uibarbuttonitem * spaceitem = [[uibarbuttonitem alloc]initwithbarbuttonsystemitem:uibarbuttonsystemitemfixedspace target:nil action:nil];
  spaceitem.width = -16;//这个值可以根据自己需要自己调整
  switch (type) {
    case 0:
      if (!is_ios_version_11) {
        self.navigationitem.leftbarbuttonitems =@[spaceitem,buttonitem];
      }else{
        self.navigationitem.leftbarbuttonitems =@[buttonitem];
      }
      break;
    case 1:
      if (!is_ios_version_11) {
        self.navigationitem.rightbarbuttonitems =@[spaceitem,buttonitem];
      }else{
        self.navigationitem.rightbarbuttonitems =@[buttonitem];
      }
      break;
      
    default:
      break;
  }
}

处理ios11情况下的偏移问题,将边距为16的约束的值改为0.

-(void)viewdidlayoutsubviews{
  if (!is_ios_version_11) return;
  uinavigationitem * item=self.navigationitem;
  nsarray * array=item.leftbarbuttonitems;
  if (array&&array.count!=0){
    //这里需要注意,你设置的第一个leftbarbuttonitem的customeview不能是空的,也就是不要设置uibarbuttonsystemitemfixedspace这种风格的item
    uibarbuttonitem * buttonitem=array[0];
    uiview * view =[[[buttonitem.customview superview] superview] superview];
    nsarray * arrayconstraint=view.constraints;
    for (nslayoutconstraint * constant in arrayconstraint) {
      if (fabs(constant.constant)==16) {
        constant.constant=0;
      }
    }
  }
}

iOS 11 UINavigationItem 去除左右间隙的方法

改后效果.png

demo地址:https://github.com/stonemover/navdemo.git

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

上一篇:

下一篇: