zoukankan      html  css  js  c++  java
  • AutoLayout与UIbutton

    1、UIButton贴近右边,高度固定,宽度跟随标题变化

    class TestButton: UIButton {
    }
    
    class ViewController: UIViewController {
        override func viewDidLoad() {
            super.viewDidLoad()
            let btn = TestButton(type: .custom)
            btn.setTitle("TestButton 1 2 3 sdasdad dadasd", for: .normal)
            btn.setTitleColor(.black, for: .normal)
            btn.layer.borderColor = UIColor.red.cgColor
            btn.layer.borderWidth = 1
            view.addSubview(btn)
    
            btn.snp.makeConstraints { (make) in
                make.centerY.equalToSuperview()
                make.right.equalToSuperview().offset(-20)
                make.height.equalTo(30)
            }
        }
    }
    

      效果:

    2、限制宽度,多了就换行

    class TestButton: UIButton {
    }
    
    class ViewController: UIViewController {
        override func viewDidLoad() {
            super.viewDidLoad()
            let btn = TestButton(type: .custom)
            btn.setTitle("TestButton 1 2 3 sdasdad dadasd,TestButton 1 2 3 sdasdad dadasd,TestButton 1 2 3 sdasdad dadasd", for: .normal)
            btn.setTitleColor(.black, for: .normal)
            btn.titleLabel?.numberOfLines = 0
            btn.layer.borderColor = UIColor.red.cgColor
            btn.layer.borderWidth = 1
            view.addSubview(btn)
    
            btn.snp.makeConstraints { (make) in
                make.centerY.equalToSuperview()
                make.right.equalToSuperview().offset(-20)
    //            make.height.equalTo(30)
                make.width.lessThanOrEqualTo(200)
            }
        }
    }
    

      效果:

     明显,UIButton的框太小了,限制了titleLabel,现在想实现,button的高度和文字高度一样

    修改如下

    class TestButton: UIButton {
        override var intrinsicContentSize: CGSize {
            return titleLabel!.sizeThatFits(CGSize( titleLabel!.preferredMaxLayoutWidth, height: .greatestFiniteMagnitude))
        }
        override func layoutSubviews() {
            titleLabel?.preferredMaxLayoutWidth = frame.size.width
            super.layoutSubviews()
        }
    }
    
    class ViewController: UIViewController {
        override func viewDidLoad() {
            super.viewDidLoad()
            let btn = TestButton(type: .custom)
            btn.setTitle("TestButton 1 2 3 sdasdad dadasd,TestButton 1 2 3 sdasdad dadasd,TestButton 1 2 3 sdasdad dadasd", for: .normal)
            btn.setTitleColor(.black, for: .normal)
            btn.titleLabel?.numberOfLines = 0
            btn.layer.borderColor = UIColor.red.cgColor
            btn.layer.borderWidth = 1
            view.addSubview(btn)
    
            btn.snp.makeConstraints { (make) in
                make.centerY.equalToSuperview()
                make.right.equalToSuperview().offset(-20)
    //            make.height.equalTo(30)
                make.width.lessThanOrEqualTo(200)
            }
        }
    }
    

      效果:

    总结:

    Autolayout和intrinsicContentSize有关,UIButton的intrinsicContentSize默认和标题长短没有关系,和UILabel不一样

  • 相关阅读:
    linux内核启动分析(2)
    linux内核启动分析
    U-Boot启动过程完全分析<转>
    linux网桥浅析
    centeros --- dockerfile
    centeros--- docker 操作命令
    java SSM项目搭建-- The server time zone value '�й���׼ʱ��' is unrecognized or represents more than one time zone
    java 环境配置 -- url is not registered
    java 环境配置 -- 配置Tomcat
    java 环境配置--破解IDEA
  • 原文地址:https://www.cnblogs.com/doudouyoutang/p/11815787.html
Copyright © 2011-2022 走看看