通过setTitleEdgeInsets和setImageEdgeInsets改变UIBtton文本图片位置

本文介绍如何使用setTitleEdgeInsets和setImageEdgeInsets方法调整UIButton的文本和图片位置,实现从默认的右边图片左边文本到左边文本右边图片的布局变换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

UIButton内部文本和图片的布局是我们日常代码中,不可缺少的部分,按钮默认左边图片右边文本,那要实现左边文本右边图片,上面图片下面文本和上面文本下面图片该怎么办呢?

setTitleEdgeInsets和setImageEdgeInsets方法的好处就是不要在重写UIButton,直接在新建的UIButton中改变上面两个属性的值就可以达到我们想要的结果

左边文本右边图片

-(UIButton *)customButtonWithFrame:(CGRect)frame title:(NSString *)title rightImage:(UIImage *)image{
    self.frame=frame;
    [self setTitle:title forState:UIControlStateNormal];
    [self setImage:image forState:UIControlStateNormal];
    self.imageEdgeInsets = UIEdgeInsetsMake(0, self.frame.size.width - self.imageView.frame.origin.x - self.imageView.frame.size.width, 0, 0);
    self.titleEdgeInsets = UIEdgeInsetsMake(0, -(self.frame.size.width - self.titleLabel.frame.size.width), 0, 0);
    return self;
}

上面文本下面图片
-(UIButton *)customButtonWithFrame:(CGRect)frame title:(NSString *)title bottomImage:(UIImage *)image
{
    self.frame=frame;
    [self setTitle:title forState:UIControlStateNormal];
    [self setImage:image forState:UIControlStateNormal];
    self.titleEdgeInsets = UIEdgeInsetsMake(- (self.frame.size.height - self.titleLabel.frame.size.height- self.titleLabel.frame.origin.y),-self.imageView.frame.size.width, 0, 0);
    self.imageEdgeInsets=UIEdgeInsetsMake(self.frame.size.height-self.imageView.frame.size.height-self.imageView.frame.origin.y,(self.frame.size.width-self.titleLabel.frame.size.width)/2, 0, 0);
    return self;
}

上面图片下面文本
-(UIButton *)customButtonWithFrame:(CGRect)frame title:(NSString *)title topImage:(UIImage *)image
{
    self.frame=frame;
    [self setTitle:title forState:UIControlStateNormal];
    [self setImage:image forState:UIControlStateNormal];
    self.imageEdgeInsets = UIEdgeInsetsMake(- (self.frame.size.height - self.imageView.frame.size.height- self.imageView.frame.origin.y),(self.frame.size.width -self.titleLabel.frame.size.width)/2.0f, 0, 0);
    self.titleEdgeInsets = UIEdgeInsetsMake(self.frame.size.height-self.titleLabel.frame.size.height-self.titleLabel.frame.origin.y, -self.imageView.frame.size.width, 0, 0);
    return self;
}
我写了一个小demo,如果有需要可以去看一下
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值