iOS开发——UI基础-按钮内边距,图片拉伸

时间:2020-12-04 20:31:55

一、内边距

UIButton有三个属性,分别可以设置按钮以及内部子控件的内边距

1、contentEdgeInsets

  如果是设置contentEdgeInsets, 会把UIImageView和UIlabel当做一个整体移动

btn.contentEdgeInsets = UIEdgeInsetsMake(, , , );

对应状态:

iOS开发——UI基础-按钮内边距,图片拉伸

2、titleEdgeInsets/imageEdgeInsets

  如果是设置titleEdgeInsets/imageEdgeInsets. 那么不会影响到另外一个, 也就是只会改变当前设置的这个控件

    btn.titleEdgeInsets = UIEdgeInsetsMake(, , , );

    btn.imageEdgeInsets = UIEdgeInsetsMake(30 ,0 , , );

iOS开发——UI基础-按钮内边距,图片拉伸iOS开发——UI基础-按钮内边距,图片拉伸

二、图片拉伸

1.iOS5以前

UIButton *btn = [[UIButton alloc] init];

    UIImage *image = [UIImage imageNamed:@"common_button_blue_highlighted"];

    // LeftCapWidth: 左边多少不能拉伸

    // 右边多少不能拉伸 = 控件的宽度 - 左边多少不能拉伸 - 1

    //  right  =  width - leftCapWidth - 1

    // 1 = width - leftCapWidth - right

    // topCapHeight: 顶部多少不能拉伸

    // 底部有多少不能拉伸 = 控件的高度 - 顶部多少不能拉伸 - 1

    //  bottom =  height - topCapWidth - 1

    // 1 = height - topCapWidth - bottom

    UIImage *newImage = [image stretchableImageWithLeftCapWidth: topCapHeight:];

2.iOS5开始

    // UIEdgeInsets是告诉系统哪些地方需要受保护, 也就是不可以拉伸

    // resizableImageWithCapInsets默认拉伸方式是平铺

    UIEdgeInsets insets = UIEdgeInsetsMake(image.size.height * 0.5, image.size.width * 0.5, image.size.height * 0.5, image.size.width * 0.5);

    UIImage *newImage =  [image resizableImageWithCapInsets:insets];

3.iOS6开始

  // resizingMode指定拉伸模式

    // 平铺

    // 拉伸

    UIEdgeInsets insets = UIEdgeInsetsMake(, , , );

    UIImage *newImage =  [image resizableImageWithCapInsets:insets resizingMode:UIImageResizingModeStretch];

    [btn setBackgroundImage:newImage forState:UIControlStateNormal];

    btn.frame = CGRectMake(, , , );

    [self.view addSubview:btn];