UILabel嵌入UIToolbar显示计数超10后出现省略号的解决方法
解决UIToolbar中UILabel计数显示省略号的问题
这个问题我之前做项目时也碰到过,核心原因是你的UILabel初始宽度只适配了"0/2000"的长度,当计数数字位数增加(比如从10/2000变成100/2000),Label宽度不够就会自动触发截断显示省略号。下面给你几个实用的解决办法:
方法一:每次更新文本后重新适配宽度
不要只在初始化Label时调用sizeToFit(),每次更新计数文本后,再调用一次这个方法让Label根据新内容调整宽度:
// 初始化Label的代码保留 let textCountLabel: UILabel = { let lb = UILabel() lb.text = "0/2000" lb.textColor = .lightGray lb.sizeToFit() return lb }() // 更新计数的方法里加上sizeToFit() func updateTextCount(_ currentCount: Int) { textCountLabel.text = "\(currentCount)/2000" textCountLabel.sizeToFit() // 关键:重新适配新文本的宽度 }
方法二:给Label设置最小宽度约束
直接给Label设置一个足够容纳最长计数(比如2000/2000)的最小宽度,这样不管数字怎么变,都不会因为宽度不够被截断:
let textCountLabel: UILabel = { let lb = UILabel() lb.text = "0/2000" lb.textColor = .lightGray lb.translatesAutoresizingMaskIntoConstraints = false // 开启自动布局 // 设置最小宽度,根据字体大小调整,这里60是示例值 lb.widthAnchor.constraint(greaterThanOrEqualToConstant: 60).isActive = true return lb }()
方法三:调整UIBarButtonItem的布局和宽度
把Label包装成UIBarButtonItem时,给这个Item设置固定宽度,或者在Toolbar中调整Item的排列,避免Label被其他元素挤压:
func createToolBar(){ let toolBar = UIToolbar() toolBar.sizeToFit() var items = [UIBarButtonItem]() // 把Label包装成BarButtonItem并设置宽度 let countBarItem = UIBarButtonItem(customView: textCountLabel) countBarItem.width = 80 // 给Item设置足够的宽度 // 可以添加灵活空间来调整位置,比如让Label靠右 items.append(UIBarButtonItem(barButtonSystemItem: .flexibleSpace, target: nil, action: nil)) items.append(countBarItem) toolBar.items = items // 记得把toolbar赋值给输入框的inputAccessoryView // yourTextField.inputAccessoryView = toolBar }
另外可以额外检查下Label的换行模式,确保不是不必要的截断:
lb.lineBreakMode = .byClipping // 避免默认的尾部截断,前提是宽度足够
内容的提问来源于stack exchange,提问作者KevinVuD
相关产品推荐
相关产品推荐

