效果图如下
在这里插入图片描述
效果图如下
在这里插入图片描述
1.直接上代码

      
     //buttonContentView:将按钮添加view 
     //is_showMore:是否展示更多
     func addTitleLabel(titleArray:[[String:Any]]){
        for btn in buttonContentView.subviews{
            btn.removeFromSuperview()//先移除所有子控件
        }
        let space = 15.0 //item间隙
        var tempLength = 0.0 //记录一行长度
        var line = 0.0 //行数
        let viewH = 30.0 //item高度
        for (index,text) in titleArray.enumerated(){
            let btn = UIButton()
            btn.backgroundColor = UIColor.init(hexString: "#F1F1F1")
            btn.titleLabel?.font = UIFont.systemFont(ofSize: 15)
            btn.setTitleColor(UIColor.init(hexString: "#222222 "), for: .normal)
            btn.setTitle(text, for: .normal)
            let  viewX = tempLength + space
            let  viewW = String.textWidth(text: text)
            let viewY = line * (viewH + space) + space
            btn.frame = CGRect.init(x: viewX, y: viewY, width: viewW, height: viewH)
            btn.layer.cornerRadius = 15 //圆角
            btn.tag = index + 666 //赋值
            buttonContentView.addSubview(btn)
            //这里是对大于两行的默认展示两行,点击向下箭头展示更多 
            if line < 2{
                btn.isHidden = false
            }else{
                if is_showMore  {
                    btn.isHidden = false
                }else{ //大于两行 并且 没有展开更多 就隐藏按钮
                    btn.isHidden = true
                }
            }
            btn.addTarget(self, action: #selector(btnClickAction(_:)), for: .touchUpInside)
            if index < (titleArray.count - 1){
                let nextViewX = viewX + viewW + space
                let nextText =  titleArray[index + 1]
                let nextViewW = String.textWidth(text: nextText)
                if  (nextViewX + nextViewW + space) < (kScreenWidth - 2 * space){
                    tempLength = viewX + viewW
                }else{
                    tempLength = 0.0
                    line = line + 1.0//加一行
                }
            }
         }
    }
    //点击文字按钮事件处理
    @objc func btnClickAction(_ btn:UIButton){
        let btnIndex = btn.tag  - 666
        let text = datalist[btnIndex]
        
        if block != nil{
            block!(text)
        }
    }

2.根据文字计算宽度方法我写在了String的扩展里了,代码如下

extension String {
    //MARK: 计算文字宽度搜索界面使用
    static func textWidth(text:String) -> CGFloat {
        let length = text.boundingRect(with:CGSize(width:CGFloat(kScreenWidth - 30), height: 30), options: .usesLineFragmentOrigin, attributes: [.font:UIFont.systemFont(ofSize: 15)], context:nil).size.width + 30
        if length >= CGFloat(kScreenWidth - 30){
            return CGFloat(kScreenWidth - 30)
        }else{
            return length
        }
    }
  
 }

End

原文地址:https://blog.csdn.net/weixin_43259805/article/details/122131433

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_27990.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注