美文网首页
iOS开发 关于button的titleLabel和imageV

iOS开发 关于button的titleLabel和imageV

作者: Kingsleeeey | 来源:发表于2018-05-29 11:19 被阅读0次

    原理

    1.titleEdgeInsets是title相对于其上下左右的inset,跟tableView的contentInset是类似的;
    2.如果只有title,那它上下左右都是相对于button的,image也是一样;
    3.如果同时有image和label,那这时候image的上左下是相对于button,右边是相对于label的;title的上右下是相对于button,左边是相对于image的。
    直接上代码,通常的设置我们会这样做:

    [self.navView.centerButton setTitleEdgeInsets:UIEdgeInsetsMake(0.0, -CGRectGetWidth(self.navView.centerButton.imageView.frame), 0.0, CGRectGetWidth(self.navView.centerButton.imageView.frame) + self.arrowPadding)];
    [self.navView.centerButton setImageEdgeInsets:UIEdgeInsetsMake(0.0, CGRectGetWidth(self.navView.centerButton.titleLabel.frame) + self.arrowPadding, 0.0, -CGRectGetWidth(self.navView.centerButton.titleLabel.frame))];
    

    相对比较繁琐且每个地方都得设置。

    下面我们通过category自定义button的titleLabel和imageView的位置,方便使用

    typedef NS_ENUM(NSUInteger, MKButtonEdgeInsetsStyle) {
        MKButtonEdgeInsetsStyleTop, // image在上,label在下
        MKButtonEdgeInsetsStyleLeft, // image在左,label在右
        MKButtonEdgeInsetsStyleBottom, // image在下,label在上
        MKButtonEdgeInsetsStyleRight // image在右,label在左
    };
    
    @interface UIButton (ImageTitleSpacing)
    
    /**
     *  设置button的titleLabel和imageView的布局样式,及间距
     *
     *  @param style titleLabel和imageView的布局样式
     *  @param space titleLabel和imageView的间距
     */
    - (void)layoutButtonWithEdgeInsetsStyle:(MKButtonEdgeInsetsStyle)style
                            imageTitleSpace:(CGFloat)space;
    

    运用分类一行代码即可实现。

    这里参考GitHub上开源项目# MKButtonStyle
    感谢作者# mokong分享

    相关文章

      网友评论

          本文标题:iOS开发 关于button的titleLabel和imageV

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