美文网首页
自定义button上的title和image的位置

自定义button上的title和image的位置

作者: MichalWilson | 来源:发表于2017-08-04 14:38 被阅读17次

    第一种方法

    首先获取button上的titleLabel和imageView的宽和高,

    imageView的宽高:

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

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

    当然也可以通过这种方法获取imageView的大小

    CGFloat imageWidth = CGImageGetWidth([UIImage imageNamed:@"driving"].CGImage);

    CGFloat imageHeight = CGImageGetHeight([UIImage imageNamed:@"driving"].CGImage);

    不过需要注意的是需要辨别获取的图片是一倍图,还是二倍图亦或者三倍图,然后用imageWidth和imageHeigt除以倍数

    titleLabel的宽高:

    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;

    }

    然后设置button的imageEdgeInsets和labelEdgeInsets属性

    1.image在上,label在下

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

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

    2.image在左,label在右

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

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

    3.image在下,label在上

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

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

    4.image在右,label在左

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

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

    第二种

    通过自定义button,重写button的以下两个方法

    -(CGRect)titleRectForContentRect:(CGRect)contentRect;

    -(CGRect)imageRectForContentRect:(CGRect)contentRect;

    这里面你可以随意设置titleLabel和imageView的位置

    第三种

    创建Button的时候使用UIButton *selectedButton = [[UIButton alloc]initWithFrame:CGRectMake(0, 100, 100, 30)];来创建,然后把你需要添加的titleLabel或者imageView作为子视图添加到button上,但是苹果官方更推荐使用buttonWithType,因为这个是唯一一个设置buttonType的地方,并且这个方法正在MRC中可以自动释放button,而initWithFrame需要手动释放.

    相关文章

      网友评论

          本文标题:自定义button上的title和image的位置

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