Swift:按钮点击后动态设置3个UILabel的宽度
嘿,遇到标签适配小屏幕的问题啦?我给你几个靠谱的解决方案,帮你搞定动态宽度的需求~
解决UILabel动态宽度的实用方案
方案1:用sizeToFit快速适配
这是最省心的方法,设置好标签的文本和字体后,直接调用sizeToFit(),它会自动根据内容调整标签的宽度(高度也会适配,如果你固定了高度也不影响):
// 假设你的标签是label label.text = "你的选项文本" label.font = UIFont.systemFont(ofSize: 14) label.sizeToFit() // 之后再调整标签的x坐标,比如跟单选按钮对齐 label.frame.origin.x = radioButton.frame.maxX + 8 label.center.y = radioButton.center.y
这样标签会刚好容纳文本,不会出现超出屏幕的情况。
方案2:Auto Layout自动布局(推荐)
如果是代码创建控件,强烈建议用Auto Layout,适配不同机型更稳定,不用手动计算尺寸。给标签设置必要的约束,不要固定宽度,让它根据内容自动撑开:
// 先把radioButton和label的translatesAutoresizingMaskIntoConstraints设为false radioButton.translatesAutoresizingMaskIntoConstraints = false label.translatesAutoresizingMaskIntoConstraints = false // 添加约束 NSLayoutConstraint.activate([ // 单选按钮的位置约束(比如左边距contentView 16) radioButton.leadingAnchor.constraint(equalTo: cell.contentView.leadingAnchor, constant: 16), radioButton.centerYAnchor.constraint(equalTo: cell.contentView.centerYAnchor), // 标签跟单选按钮右对齐,中间留8间距,垂直居中 label.leadingAnchor.constraint(equalTo: radioButton.trailingAnchor, constant: 8), label.centerYAnchor.constraint(equalTo: radioButton.centerYAnchor), // 不要设置width约束,让内容决定宽度;可以固定高度或者让它自动适配 label.heightAnchor.constraint(equalToConstant: 20) ])
这样不管在iPhone5还是iPhone6上,Auto Layout都会自动调整标签宽度,保证内容不超出视图。
方案3:手动计算文本宽度
如果你偏好手动布局,可以通过文本的属性计算出准确的宽度:
let text = "你的选项文本" let font = UIFont.systemFont(ofSize: 14) // 计算文本需要的宽度,高度设为你想要的固定值 let textBounds = text.boundingRect( with: CGSize(width: CGFloat.greatestFiniteMagnitude, height: 20), options: .usesLineFragmentOrigin, attributes: [NSAttributedString.Key.font: font], context: nil ) // 设置标签frame,宽度取计算值的向上取整,避免模糊 label.frame = CGRect( x: radioButton.frame.maxX + 8, y: radioButton.frame.minY, width: ceil(textBounds.width), height: 20 )
另外还要注意,确保你的UITableViewCell的contentView有合适的内边距,避免整体内容超出屏幕范围哦~
内容的提问来源于stack exchange,提问作者Sarabjit Singh
相关产品推荐
相关产品推荐

