详解iOS11关于导航栏问题

 更新时间:2017年10月21日 08:29:35   作者:h_wen  
本篇文章主要介绍了详解iOS11关于导航栏问题,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

前言

iOS11导航栏除了新加入了largeTitles和searchController两个新特性,可能是加入largeTitles的原因其结构较iOS 10发生了些变化。

iOS11之前导航栏的navigationBarButton则直接添加在navigationBar上面

在iOS11之后,苹果添加了新的类来管理,可以看到titleView直接加在_UINavigationBarContentView上,UIBarButtonItem则添加在_UIButtonBarStackView上面,而_UIButtonBarStackView则添加在_UINavigationBarContentView上面,最后添加到UINavigationBar上面,如下图所示:

由于结构的变化,在iOS 11中我们自定义设置leftBarButtonItem,其点击区域变得很小,让人点的很焦灼,如下图绿色区域所示:


具体代码如下,设置的frame在这里并没有什么卵用,点击区域依然只有图片原本的size那么大:

    UIButton *btn = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 60, 40)];
    [btn setImage:imageWhite forState:UIControlStateNormal];
    [btn addTarget:self action:@selector(bpBack) forControlEvents:UIControlEventTouchUpInside];
    btn.backgroundColor = [UIColor greenColor];
    UIBarButtonItem *leftItem = [[UIBarButtonItem alloc] initWithCustomView:btn];
    leftItem.width = 60;
    self.navigationItem.leftBarButtonItem = leftItem;

为了能增加点击区域,我们就需要增加button的size,然后就想到通过改变ContentEdgeInsets来增大button的size,

... 
...
 btn.backgroundColor = [UIColor greenColor];
 if (@available(iOS 11.0,*)) {
     [btn setContentMode:UIViewContentModeScaleToFill];
     [btn setContentEdgeInsets:UIEdgeInsetsMake(0, 5, 5, 20)];
  }
 UIBarButtonItem *leftItem = [[UIBarButtonItem alloc] initWithCustomView:btn];
...
...

另:searchBar设置为titleview,会导致navigation的高度发生异常(ps:push到下一个界面,下个界面的view距离navigation出现了一段黑色区域)需要处理下:

  CGRect frame = CGRectMake(0, 0, 150, 44);
  UISearchBar *search = [[UISearchBar alloc] initWithFrame:frame];
  search.placeholder = @"搜索";
  search.delegate = self;
  UITextField *searchField=[search valueForKey:@"_searchField"];
  searchField.backgroundColor = [UIColor groupTableViewBackgroundColor];
// --- iOS 11异常处理
  if(@available(iOS 11.0, *)) {
    [[search.heightAnchor constraintEqualToConstant:44] setActive:YES];
  }
  self.navigationItem.titleView = search;

详细资料参考:
https://stackoverflow.com/questions/45997996/ios-11-uisearchbar-in-uinavigationbar

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

相关文章

  • Objective-C const常量的优雅使用方法

    Objective-C const常量的优雅使用方法

    这篇文章主要为大家介绍了Objective-C const常量的优雅使用方法示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-08-08
  • Android开发笔记之简单基站定位程序的实现

    Android开发笔记之简单基站定位程序的实现

    这篇文章主要介绍了Android开发笔记之简单基站定位程序的实现,详细的介绍了基站定位其实很简单,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。
    2016-11-11
  • IOS 签名错误codesign failed with exit code 1解决方法

    IOS 签名错误codesign failed with exit code 1解决方法

    这篇文章主要介绍了IOS 签名错误codesign failed with exit code 1解决方法的相关资料,遇到同样问题的朋友可以看下,这里提供了解决方案,需要的朋友可以参考下
    2017-01-01
  • iOS 增加右侧按钮功能实例代码

    iOS 增加右侧按钮功能实例代码

    这篇文章主要介绍了iOS 增加右侧按钮功能实例代码,需要的朋友可以参考下
    2017-07-07
  • iOS实现手势解锁操作

    iOS实现手势解锁操作

    这篇文章主要为大家详细介绍了iOS实现手势解锁操作功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-03-03
  • iOS开发教程之常见的性能优化技巧

    iOS开发教程之常见的性能优化技巧

    这篇文章主要给大家介绍了关于iOS开发教程之常见的性能优化技巧,文中通过示例代码介绍的非常详细,对大家学习或者使用iOS具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-03-03
  • iOS 11 UINavigationItem 去除左右间隙的方法

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

    本篇文章主要介绍了iOS 11 UINavigationItem 去除左右间隙的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-10-10
  • iOS仿支付宝芝麻信用分数仪表盘动画效果

    iOS仿支付宝芝麻信用分数仪表盘动画效果

    这篇文章主要为大家详细介绍了iOS仿支付宝芝麻信用分数仪表盘动画效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-09-09
  • iOS中的ipa重签名(逆向必备)

    iOS中的ipa重签名(逆向必备)

    这篇文章给大家介绍了ios中的ipa重签名知识以及错误原因及解决俄方案,需要的朋友参考下吧
    2018-01-01
  • fastlane自动化打包iOS APP过程示例

    fastlane自动化打包iOS APP过程示例

    这篇文章主要为大家介绍了fastlane自动化打包iOS APP的过程示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-07-07

最新评论