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

来源:互联网 发布:淘宝新店怎么推广 编辑:程序博客网 时间:2024/05/16 04:40

导航栏,是个很难相处的东西。这次,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:viewattribute:NSLayoutAttributeLeadingrelatedBy:NSLayoutRelationEqualtoItem:view.superviewattribute:NSLayoutAttributeLeadingmultiplier:1.0constant:8.0]];

                applied = YES;

            }

            elseif (self.position ==BarButtonViewPositionRight)

            {

                [view.superviewaddConstraint:[NSLayoutConstraintconstraintWithItem:viewattribute: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

点击打开链接