iOS11 导航栏按钮出现点击触发不灵敏(触发面积变小)

导航栏,是个很难相处的东西。这次,iOS11继续改动了导航栏按钮的一些图层。。可以打开Xcode图层看看,这里先直接上代码了,以后再研究研究。

#import <UIKit/UIKit.h>

typedef NS_ENUM(NSInteger, BarButtonViewPosition) {

    BarButtonViewPositionLeft,

    BarButtonViewPositionRight

};

@interface BarButtonView : UIView


@property (nonatomic,assign) BarButtonViewPosition position;  


@end



#import "BarButtonView.h"


@interface BarButtonView ()

{

    BOOL applied;

}


@end


@implementation BarButtonView


- (void)layoutSubviews

{

    [superlayoutSubviews];

    

    if (applied || [[[UIDevicecurrentDevice] systemVersion]doubleValue]  < 11)

    {

        return;

    }

    

    // Find the _UIButtonBarStackView containing this view, which is a UIStackView, up to the UINavigationBar

    UIView *view = self;

    while (![view isKindOfClass:[UINavigationBar class]] && [view superview] != nil)

    {

        view = [view superview];

        if ([view isKindOfClass:[UIStackView class]] && [view superview] != nil)

        {

            if (self.position == BarButtonViewPositionLeft)

            {

                [view.superviewaddConstraint:[NSLayoutConstraintconstraintWithItem:view attribute:NSLayoutAttributeLeadingrelatedBy:NSLayoutRelationEqualtoItem:view.superviewattribute:NSLayoutAttributeLeadingmultiplier:1.0constant:8.0]];

                applied = YES;

            }

            elseif (self.position ==BarButtonViewPositionRight)

            {

                [view.superviewaddConstraint:[NSLayoutConstraintconstraintWithItem:view attribute:NSLayoutAttributeTrailingrelatedBy:NSLayoutRelationEqualtoItem:view.superviewattribute:NSLayoutAttributeTrailingmultiplier:1.0constant:-8.0]];

                applied = YES;

            }

            break;

        }

    }

}


@end  

引用:

- (void)setLeftBarButtonView:(UIView *)view

{

    if ([[[UIDevicecurrentDevice] systemVersion]doubleValue] >= 11)

    {

        BarButtonView *barBtnView = [[BarButtonViewalloc] initWithFrame:view.frame];

        [barBtnView setPosition:BarButtonViewPositionLeft];

        [barBtnView addSubview:view];

        

        [self.navigationItemsetLeftBarButtonItem:[[UIBarButtonItemalloc] initWithCustomView:barBtnView]];

    }

    else

    {

        UIBarButtonItem *space = [[UIBarButtonItemalloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpacetarget:nilaction:NULL];

        [space setWidth:-8];

        

        [self.navigationItemsetLeftBarButtonItems:@[space,[[UIBarButtonItemalloc] initWithCustomView:view]]];

    }

}

- (void)setRightBarButtonView:(UIView *)view

{

    if ([[[UIDevicecurrentDevice] systemVersion]doubleValue] >= 11)

    {

        BarButtonView *barBtnView = [[BarButtonViewalloc] initWithFrame:view.frame];

        [barBtnView setPosition:BarButtonViewPositionRight];

        [barBtnView addSubview:view];

        

        [self.navigationItemsetRightBarButtonItem:[[UIBarButtonItemalloc] initWithCustomView:barBtnView]];

    }

    else

    {

        UIBarButtonItem *space = [[UIBarButtonItemalloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpacetarget:nilaction:NULL];

        [space setWidth:-8];

        

        [self.navigationItemsetRightBarButtonItems:@[space,[[UIBarButtonItemalloc] initWithCustomView:view]]];

    }

}  


这里的View就是传给navigationItem的CustomView

点击打开链接

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值