美文网首页iOS
UIBarButtonItem大小适配iOS11

UIBarButtonItem大小适配iOS11

作者: Billlin | 来源:发表于2017-10-17 12:08 被阅读1138次

    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

    相关文章

      网友评论

        本文标题:UIBarButtonItem大小适配iOS11

        本文链接:https://www.haomeiwen.com/subject/kzzruxtx.html