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

 更新时间:2017年10月20日 14:07:58   作者:stonemover  
本篇文章主要介绍了iOS 11 UINavigationItem 去除左右间隙的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

前言

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

修改思路

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

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


核心代码

配置导航器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;
      }
    }
  }
}

改后效果.png

Demo地址:https://github.com/StoneMover/navDemo.git

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

相关文章

  • iOS中的线程死锁实例详解

    iOS中的线程死锁实例详解

    这篇文章主要给大家介绍了关于iOS中线程死锁的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-09-09
  • 浅谈IOS如何对app进行安全加固

    浅谈IOS如何对app进行安全加固

    运行在越狱设备上的IOS app,非常容易遭到破解分析,这里列举一些可以加大破解难度的方法,希望有所帮助。
    2021-06-06
  • iOS设置UIButton文字显示位置和字体大小、颜色的方法

    iOS设置UIButton文字显示位置和字体大小、颜色的方法

    这篇文章给大家分享了iOS如何设置UIButton的文字显示位置和字体的大小、颜色,文中给出了示例代码,相信对大家的学习和理解很有帮助,有需要的朋友们下面来一起看看吧。
    2016-09-09
  • IOS展开三级列表效果示例

    IOS展开三级列表效果示例

    今天介绍的是一个很不错的三级列表展开效果的例子,文章运用实例代码介绍的很详细,提供给学习IOS的小伙伴们使用。
    2016-08-08
  • iOS撸一个简单路由Router的实现代码

    iOS撸一个简单路由Router的实现代码

    这篇文章主要介绍了iOS撸一个简单路由Router的实现代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-09-09
  • iOS移动端软键盘弹起空白和滚动穿透问题解决方案

    iOS移动端软键盘弹起空白和滚动穿透问题解决方案

    这篇文章主要为大家介绍了iOS移动端软键盘弹起空白和滚动穿透问题解决方案,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-07-07
  • iOS 页面滑动与标题切换颜色渐变的联动效果实例

    iOS 页面滑动与标题切换颜色渐变的联动效果实例

    本篇文章主要介绍了iOS 页面滑动与标题切换颜色渐变的联动效果实例,具有一定的参考价值,有兴趣的可以了解一下。
    2017-04-04
  • iOS实现二维码的扫描功能

    iOS实现二维码的扫描功能

    本文给大家介绍的是iOS 原生态API实现二维码的扫描功能,非常简单实用,有需要的小伙伴可以参考下。
    2015-07-07
  • ios下OC与JS交互之WKWebView

    ios下OC与JS交互之WKWebView

    本篇文章主要介绍了ios下OC与JS交互之WKWebView,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-03-03
  • IOS网络请求之NSURLSession使用详解

    IOS网络请求之NSURLSession使用详解

    这篇文章主要介绍了IOS网络请求之NSURLSession使用详解,今天使用NSURLConnection分别实现了get、post、表单提交、文件上传、文件下载,有兴趣的可以了解一下。
    2017-02-02

最新评论