UIBarButtonItem大小适配iOS11

iOS11上如果在UIBarButtonItem的customView上添加红点或者其它的控件,那么通过customView的bounds设置宽高是无效的,而在系统版本iOS11以下的设备上运行是正常的。



在系统iOS11的设备上运行的效果

在系统iOS10的设备上运行的效果



造成原因

从iOS11开始UIBarButtonItem使用自动布局引擎。

解决办法

  • 办法一
    icon的切图大小应该与customView设置的大小一致。
    效果:
  • 办法二
    通过设置customView的widthAnchor和heightAnchor解决。NSLayoutAnchor是iOS9新增的。
    UIButton *rightButton = [UIButton buttonWithType:UIButtonTypeSystem];
    rightButton.bounds = CGRectMake(0, 0, 22, 22);
    
#ifdef __IPHONE_9_0
    if ([rightButton respondsToSelector:@selector(widthAnchor)]) {
        [rightButton.widthAnchor constraintEqualToConstant:22].active = YES;
    }
    if ([rightButton respondsToSelector:@selector(heightAnchor)]) {
        [rightButton.heightAnchor constraintEqualToConstant:22].active = YES;
    }
#endif
    
    [rightButton setBackgroundImage:UIImageNamed(@"icon_message_normal.png")
                           forState:UIControlStateNormal];
    [rightButton setBackgroundImage:UIImageNamed(@"icon_message_pressed.png")
                           forState:UIControlStateHighlighted];
    UIBarButtonItem *rightBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:rightButton];
    self.navigationItem.rightBarButtonItem = rightBarButtonItem;

效果:



参考

Constraint a UIBarButtonItem's size in the navigaiton bar with iOS 11

Updating Your App for iOS 11

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 下载源码 GitHub上的代码已经更新(2017-09-28),请不要copy文中代码,代码有遗漏!!!!另外,请...
    Dean_F阅读 4,128评论 5 13
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,179评论 25 708
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,224评论 4 61
  • 幺爹是年过花甲的父亲的最小的弟弟。 父亲有三个弟弟,整个家庭带着当时浓厚的时代印痕,家庭成员很多,家底...
    烟雨江岚阅读 291评论 2 1
  • 近日看到一朋友写的日志,说“写作和旅行是两个很好的养生办法,因为它们都是在梳理灵魂。肉体是人的硬件,灵魂是人的软件...
    自在牛阅读 742评论 0 8