将 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 子视图的大小的主要内容,如果未能解决你的问题,请参考以下文章

创建一个基于 UIView 的子视图自动调整大小的视图

将 UILabel 粘贴到 UIView 或 UIImageView

UIView 子视图没有动画

为啥我的 UIView 的 UILabel 子视图不显示?

如何设置 UIView 高度等于两个子视图 UILabel 的最大值?

将UIView中UILabel的字体大小调整为不同的设备大小