11

/**

 *  设置button的titleLabel和imageView的布局样式,及间距

 *

 *  @param style titleLabel和imageView的布局样式

 *  @param space titleLabel和imageView的间距

 */

- (void)layoutButtonWithEdgeInsetsStyle:(MKButtonEdgeInsetsStyle)style

                        imageTitleSpace:(CGFloat)space;

 

typedef NS_ENUM(NSUInteger, MKButtonEdgeInsetsStyle) {

    MKButtonEdgeInsetsStyleTop, // image在上,label在下

    MKButtonEdgeInsetsStyleLeft, // image在左,label在右

    MKButtonEdgeInsetsStyleBottom, // image在下,label在上

    MKButtonEdgeInsetsStyleRight // image在右,label在左

};

 

- (void)layoutButtonWithEdgeInsetsStyle:(MKButtonEdgeInsetsStyle)style

                        imageTitleSpace:(CGFloat)space

{

    //    self.backgroundColor = [UIColor cyanColor];

    /**

     *  如果只有title,那它上下左右都是相对于button的,image也是一样;

     *  如果同时有image和label,那这时候image的上左下是相对于button,右边是相对于label的;title的上右下是相对于button,左边是相对于image的。

     */

    

    

    // 1. 得到imageView和titleLabel的宽、高

    CGFloat imageWith = self.imageView.frame.size.width;

    CGFloat imageHeight = self.imageView.frame.size.height;

    

    CGFloat labelWidth = 0.0;

    CGFloat labelHeight = 0.0;

    if ([UIDevice currentDevice].systemVersion.floatValue >= 8.0) {

        // 由于iOS8中titleLabel的size为0,用下面的这种设置

        labelWidth  = self.titleLabel.intrinsicContentSize.width;

        labelHeight = self.titleLabel.intrinsicContentSize.height;

    } else {

        labelWidth  = self.titleLabel.frame.size.width;

        labelHeight = self.titleLabel.frame.size.height;

    }

    

    // 2. 声明全局的imageEdgeInsets和labelEdgeInsets

    UIEdgeInsets imageEdgeInsets = UIEdgeInsetsZero;

    UIEdgeInsets labelEdgeInsets = UIEdgeInsetsZero;

    

    // 3. 根据style和space得到imageEdgeInsets和labelEdgeInsets的值

    switch (style) {

        case MKButtonEdgeInsetsStyleTop:

        {

            imageEdgeInsets = UIEdgeInsetsMake(-labelHeight-space/2.0, 0, 0, -labelWidth);

            labelEdgeInsets = UIEdgeInsetsMake(0, -imageWith, -imageHeight-space/2.0, 0);

        }

            break;

        case MKButtonEdgeInsetsStyleLeft:

        {

            imageEdgeInsets = UIEdgeInsetsMake(0, -space/2.0, 0, space/2.0);

            labelEdgeInsets = UIEdgeInsetsMake(0, space/2.0, 0, -space/2.0);

        }

            break;

        case MKButtonEdgeInsetsStyleBottom:

        {

            imageEdgeInsets = UIEdgeInsetsMake(0, 0, -labelHeight-space/2.0, -labelWidth);

            labelEdgeInsets = UIEdgeInsetsMake(-imageHeight-space/2.0, -imageWith, 0, 0);

        }

            break;

        case MKButtonEdgeInsetsStyleRight:

        {

            imageEdgeInsets = UIEdgeInsetsMake(0, labelWidth+space/2.0, 0, -labelWidth-space/2.0);

            labelEdgeInsets = UIEdgeInsetsMake(0, -imageWith-space/2.0, 0, imageWith+space/2.0);

        }

            break;

        default:

            break;

    }

    // 4. 赋值

    self.titleEdgeInsets = labelEdgeInsets;

    self.imageEdgeInsets = imageEdgeInsets;

}

 

posted on 2018-08-31 23:15  张麻子  阅读(104)  评论(0)    收藏  举报

导航