Swift - UIButton图文位置

在开发中我们常遇到要修改按钮图文位置,那么在swift中我们应该怎么做比较好呢?
对按钮做些扩展,初始化完后调用方法就可以直接修改图文位置
首先需要设置枚举,确定图文位置

enum XButtonEdgeInsetsStyle {
        case ImageTop //图片在上,文字在下
        case ImageLeft //图片在上,文字在下
        case ImageBottom //图片在上,文字在下
        case ImageRight //图片在上,文字在下
    }

之后设置图文位置

     /**
     ># Important:按钮图文位置设置
     知识点:titleEdgeInsets是title相对于其上下左右的inset,跟tableView的contentInset是类似的,
     *  如果只有title,那它上下左右都是相对于button的,image也是一样;
     *  如果同时有image和label,那这时候image的上左下是相对于button,右边是相对于label的;title的上右下是相对于button,左边是相对于image的。
     */
    func layoutButtonWithEdgInsetStyle(_ style: XButtonEdgeInsetsStyle,_ space:CGFloat){
        //获取image宽高
        let imageW = self.imageView?.frame.size.width
        let imageH = self.imageView?.frame.size.height
        //获取label宽高
        var lableW = self.titleLabel?.intrinsicContentSize.width
        let lableH = self.titleLabel?.intrinsicContentSize.height
        
        var imageEdgeInsets:UIEdgeInsets = .zero
        var lableEdgeInsets:UIEdgeInsets = .zero
        if self.frame.size.width <= lableW! { //如果按钮文字超出按钮大小,文字宽为按钮大小
            lableW = self.frame.size.width
        }
        //根据传入的 style 及 space 确定 imageEdgeInsets和labelEdgeInsets的值
        switch style {
        case .ImageTop:
            imageEdgeInsets = UIEdgeInsetsMake(0.0 - lableH! - space/2.0, 0, 0, 0.0 - lableW!)
            lableEdgeInsets = UIEdgeInsetsMake(0, 0.0 - imageW!, 0.0 - imageH! - space/2.0, 0)
        case .ImageLeft:
            imageEdgeInsets = UIEdgeInsetsMake(0, 0.0 - space/2.0, 0, space/2.0)
            lableEdgeInsets = UIEdgeInsetsMake(0, space/2.0, 0, 0.0 - space/2.0)
        case .ImageBottom:
            imageEdgeInsets = UIEdgeInsetsMake(0, 0, 0.0 - lableH! - space/2.0, 0.0 - lableW!)
            lableEdgeInsets = UIEdgeInsetsMake(0.0 - imageH! - space/2.0, 0.0 - imageW!, 0, 0)
        case .ImageRight:
            imageEdgeInsets = UIEdgeInsetsMake(0, lableW! + space/2.0, 0, 0.0 - lableW! - space/2.0)
            lableEdgeInsets = UIEdgeInsetsMake(0, 0.0 - imageW! - space/2.0, 0, imageW! + space/2.0)
        }
        //赋值
        self.titleEdgeInsets = lableEdgeInsets
        self.imageEdgeInsets = imageEdgeInsets
        
    }

调用起来很方便,初始化后

button.layoutButtonWithEdgInsetStyle(.ImageTop, 10)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 14,556评论 4 61
  • 哪有什么捷径,最快的路无非就是做好眼下,踏踏实实,看是最慢的路却又是最快的路。急于获胜的心理,会蒙蔽我...
    小迷糊晚来秋阅读 3,728评论 0 1
  • 这张图,是前几天的一个微信聊天截图。说实在的,还是有些感动的,对于一个自媒体人,这是一个莫大的支持。这个不是因为“...
    马玉华阅读 2,773评论 0 1
  • 夜深了,还在奋斗。 作为一枚应届毕业生,前途一片渺茫。出租屋里,灯光耀眼,伸伸坐的麻木的腿脚,一看时间快夜晚11点...
    钟无意阅读 3,233评论 1 2
  • 今天夏至,雨下个不停。想起我以前在微信公众号写的一篇:(重发一下,表达一下此时的情感) 秋雨,淅淅沥沥…… (献给...
    不系之舟a阅读 2,325评论 2 6

友情链接更多精彩内容