将 UIView 调整为其 UILabel 子视图的大小
Posted
技术标签:
【中文标题】将 UIView 调整为其 UILabel 子视图的大小【英文标题】:Resize a UIView to the size of its UILabel subview 【发布时间】:2017-04-15 19:38:02 【问题描述】:我想创建一个如下所示的 UIView:
我希望此视图始终根据其中的文本调整自身大小。我尝试过这样的事情:
import UIKit
@IBDesignable class TagView: UIView
@IBInspectable var tagTitle: String?
override func awakeFromNib()
super.awakeFromNib()
setUpView()
func setUpView()
let label = UILabel()
label.text = tagTitle
addSubview(label)
layer.cornerRadius = 15
frame = CGRect(origin: frame.origin, size: sizeThatFits(label.frame.size))
但这根本不会改变视图的frame
。我认为原因是启用了自动布局。
我可以做些什么来达到这个效果?我是不是从错误的角度来处理这个问题?
【问题讨论】:
【参考方案1】:尝试将视图的宽度约束添加到与标签的宽度相等。同样的高度。
【讨论】:
当我这样做并同时使用translatesAutoresizingMaskIntoConstraints = false
时,它有点工作,但它不再保留它在屏幕上的位置,它被定位到 (0, 0)。跨度>
同时添加垂直和水平约束【参考方案2】:
试试这个代码的 setUpView() 方法
func setUpView()
let label = UILabel(frame: CGRect(x: 0, y: 0, width: 200, height: 21))
label.center = CGPoint(x: 160, y: 285)
label.text = tagTitle
label.layer.masksToBounds = true
label.layer.cornerRadius = 15
self.view.addSubview(label)
【讨论】:
不幸的是,这不起作用。我什至再也看不到UILabel
了。以上是关于将 UIView 调整为其 UILabel 子视图的大小的主要内容,如果未能解决你的问题,请参考以下文章
将 UILabel 粘贴到 UIView 或 UIImageView