iOS7 excessive navigationbar button padding

后端 未结 6 682
天涯浪人
天涯浪人 2020-12-02 11:05

I\'m experiencing excessive UIBarButtonItem padding/spacing when using the LeftBarItems and RightBarItems (see image below). The icons used on the UIBarButtonItems do not co

6条回答
  •  情歌与酒
    2020-12-02 11:56

    As @Luda comments, the solution is to

    self.myBarButtonItem.imageInsets = UIEdgeInsetsMake(0, 25, 0, -25);
    

    However, @andrrs also points a problem here when inset is large: the hit area. In this case,we have to implement a way to setHitTestEdgeInsets. Below is an category method:

    @implementation UIButton (Extensions)
    
    @dynamic hitTestEdgeInsets;
    
    static const NSString *KEY_HIT_TEST_EDGE_INSETS = @"HitTestEdgeInsets";
    
    -(void)setHitTestEdgeInsets:(UIEdgeInsets)hitTestEdgeInsets {
        NSValue *value = [NSValue value:&hitTestEdgeInsets withObjCType:@encode(UIEdgeInsets)];
        objc_setAssociatedObject(self, &KEY_HIT_TEST_EDGE_INSETS, value, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
    }
    
    -(UIEdgeInsets)hitTestEdgeInsets {
        NSValue *value = objc_getAssociatedObject(self, &KEY_HIT_TEST_EDGE_INSETS);
        if(value) {
            UIEdgeInsets edgeInsets; [value getValue:&edgeInsets]; return edgeInsets;
        }else {
            return UIEdgeInsetsZero;
        }
    }
    
    - (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event {
        if(UIEdgeInsetsEqualToEdgeInsets(self.hitTestEdgeInsets, UIEdgeInsetsZero) ||       !self.enabled || self.hidden) {
            return [super pointInside:point withEvent:event];
        }
    
        CGRect relativeFrame = self.bounds;
        CGRect hitFrame = UIEdgeInsetsInsetRect(relativeFrame, self.hitTestEdgeInsets);
    
        return CGRectContainsPoint(hitFrame, point);
    }
    
    @end
    

提交回复
热议问题