让你的Button任性起来~~~

作者: 我是七月 | 来源:发表于2017-05-26 19:13 被阅读499次
    奋斗的七月

    UIButton中的titleEdgeInsets和imageEdgeInsets可以管理button中title和image的布局。利用这两个属性就可以轻松的设置一个图片一个文本这样的布局。
    但是先要对着两个属性了解清楚

    UIButton *btnCeShi = [[UIButton alloc]initWithFrame:CGRectMake(20, 30, 80, 80)];
    [self.view addSubview:btnCeShi];
    btnCeShi.backgroundColor = [UIColor redColor];
    [btnCeShi setTitle:@"测试" forState:UIControlStateNormal];
    [btnCeShi setImage:[UIImage imageNamed:@"select"] forState:UIControlStateNormal];
    
    奋斗的七月

    这是一个基本的button,默认情况下,图片在左,文字在右,垂直居中显示,如上图。

    只设置image或title其中一项时,默认是正常居中显示的,但我们同时设置image和title时,则会出现上图的显示,这是为什么呢?那就是当我们同时添加image和title时,image默认会向左偏移button的titleLabel的宽度,而title会向右偏移image的宽度,既然明白了原理,我们就可以设置偏移量来达到我们想要的任何效果。

    默认情况下

    button.titleEdgeInsets = UIEdgeInsetsZero;
    button.imageEdgeInsets = UIEdgeInsetsZero;
    

    现在我们就可以任意的修改button的布局

    1. 设置图片和文字都是居中的布局
    button.titleEdgeInsets = UIEdgeInsetsMake(0, -button.imageView.frame.size.width, 0, 0);
    // button.imageEdgeInsets = UIEdgeInsetsMake(0, 0, 0, -button.titleLabel.frame.size.width);
    // 由于iOS8中titleLabel的size为0,用上面这样设置有问题,修改一下即可
    button.imageEdgeInsets = UIEdgeInsetsMake(0, 0, 0, -button.titleLabel.intrinsicContentSize.width);
    
    奋斗的七月
    2. 设置图片在上,文字在下,水平居中显示
    button.titleEdgeInsets = UIEdgeInsetsMake(0, -button.imageView.frame.size.width, -button.imageView.frame.size.height, 0);
    // button.imageEdgeInsets = UIEdgeInsetsMake(-button.titleLabel.frame.size.height, 0, 0, -button.titleLabel.frame.size.width);
    // 由于iOS8中titleLabel的size为0,用上面这样设置有问题,修改一下即可
    button.imageEdgeInsets = UIEdgeInsetsMake(-button.titleLabel.intrinsicContentSize.height, 0, 0, -button.titleLabel.intrinsicContentSize.width);
    
    奋斗的七月

    如果觉得图片和文字离的太近了,稍微分开一点:

    CGFloat offset = 40.0f;
    button.titleEdgeInsets = UIEdgeInsetsMake(0, -button.imageView.frame.size.width, -button.imageView.frame.size.height-offset/2, 0);
    // button.imageEdgeInsets = UIEdgeInsetsMake(-button.titleLabel.frame.size.height-offset/2, 0, 0, -button.titleLabel.frame.size.width);
    // 由于iOS8中titleLabel的size为0,用上面这样设置有问题,修改一下即可
    button.imageEdgeInsets = UIEdgeInsetsMake(-button.titleLabel.intrinsicContentSize.height-offset/2, 0, 0, -button.titleLabel.intrinsicContentSize.width);
    
    奋斗的七月
    2. 设置文字左对齐,图片右对齐
    button.titleEdgeInsets = UIEdgeInsetsMake(0, -button.imageView.frame.size.width - button.frame.size.width + button.titleLabel.intrinsicContentSize.width, 0, 0);
    button.imageEdgeInsets = UIEdgeInsetsMake(0, 0, 0, -button.titleLabel.frame.size.width - button.frame.size.width + button.imageView.frame.size.width);
    
    奋斗的七月

    相关文章

      网友评论

      • 小小白衣:这个是要给定的图片大小合适才行吧 不然会有问题
        我是七月:@小小白衣 恩 是的,图片要合适才可以
      • 十一岁的加重:自动布局下,不能自适应宽高
      • 苜蓿鬼仙:有没有方式可以 在移动图片的情况下,同时拉伸变形图片?我之前做过测试,貌似会有问题!!!请问你这边有好的解决方案吗?
        我是七月:@苜蓿鬼仙 恩,这个没有遇到过这个问题,你可以发个demo,我给你看看
        苜蓿鬼仙:@奋斗的七月 不是不是,我说错了,不是移动的情况下,就是最终情况下,比如说是 左图右文字的情况,想变换成,右图左文字,同时图片 拉伸或是压缩的情况;我之前自己做的测试,图片和文字变换位置后,如果还要更改图片的尺寸的话,会有显示问题
        我是七月:@苜蓿鬼仙 你说的是写一个动画吧,移动和拉伸,这两个动画同时进行?
      • 一纸符文:这个用xib怎么弄
        我是七月:在这个方法里用就行了
        - (void)awakeFromNib {

        }

      • 368a241de7f7:有错别字,设置图片和问题都是居中的布局
        我是七月::+1: 谢谢,已经修改更新了
      • 春暖花已开:不错不错,,值得推荐!
        我是七月:@人民重重 谢谢支持:joy:

      本文标题:让你的Button任性起来~~~

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