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,如果有需要可以去看一下