• iOS UIButton 图片文字上下垂直布局 解决方案


    1、实现效果:

    这是一个UIButton,需要改变image和title相对位置。

    2、实现原理:

    利用UIEdgeInsetsMake:里面的四个参数表示距离上边界、左边界、下边界、右边界的距离,默认都为零

     

    此时,4个边距都有一个初始值,我们设置UIEdgeInsetsMake(0,0,0,0),位置是不动的

    当我们给top一个正1的位移:UIEdgeInsetsMake(1,0,0,0),此时btn内的image是向下移动了0.5。

    注意:为什么是0.5,这是因为我们没有设置button的内部控件对齐方式,位移距离此时变成了一半。

    比如:btn.contentHorizontalAlignment和contentVerticalAlignment

    只有当我们设置了这两个属性,位移才会和设置位移值相等。

    我们记住一个原则,当设置正值,就表示内边距变大,负值则表示减少内边距

    3、实现如下:

    定义按钮

            btnFlash = UIButton(frame: frame)
            btnFlash.setImage(UIImage(named: "flash_off"), for: .normal)
            btnFlash.setTitle("手电筒", for: .normal)
            self.view.addSubview(btnFlash)
            setButtonMiddle(btn: btnFlash)

    方法调用

        /// 设置按钮图片文字上下垂直居中
        /// 前提:1、必须设置好按钮的图片和文字
        ///      2、按钮frame能让图片和文字正常显示出来(别btn宽度太小,文字都省略号了)
        ///
        /// - Parameter btn: <#btn description#>
        func setButtonMiddle(btn:UIButton) {
            if btn.imageView == nil || btn.titleLabel == nil{
                return
            }
            
            let imgW:CGFloat = btn.imageView!.frame.size.width
            let imgH:CGFloat = btn.imageView!.frame.size.height
            let lblW:CGFloat = btn.titleLabel!.frame.size.width
            let lblH:CGFloat = btn.titleLabel!.frame.size.height
            //设置图片和文字的间距,这里可自行调整
            let margin:CGFloat = 5
    
            btn.imageEdgeInsets = UIEdgeInsetsMake(-lblH-margin/2, 0, 0, -lblW)
            btn.titleEdgeInsets = UIEdgeInsetsMake(imgH+margin/2, -imgW, 0, 0)        
            
        }

    总结来说,就是:

    图片 向  右上角   移动

    文字 向  左下角   移动

    PS:如果图片文字左右平移,参考这个

    iOS UIButton 图片文字左右互移 位置对调 解决方案

  • 相关阅读:
    CodeForces 460B
    CodeForces 456A
    CodeForces462B
    HDU1394(线段树||树状数组)
    HDU1541(树状数组)
    HDU1556(树状数组)
    HDU5726(RMQ&&二分)
    POJ1182(并查集)
    HDU4496(并查集)
    HDU3038(并查集)
  • 原文地址:https://www.cnblogs.com/yajunLi/p/5949359.html
Copyright © 2020-2023  润新知