将 UILabel 作为子视图添加到具有编程约束的 UITextView 时,如何停止 "content size" 约束

How can I stop the "content size" constraints when adding a UILabel as a subview to a UITextView, with programmatic constraints

我有这个UIVIew扩展方法

func addSubviewWithConstrainedBounds(subview:UIView) {
    subview.translatesAutoresizingMaskIntoConstraints = false
    self.addSubview(subview)
    NSLayoutConstraint.activate([
        subview.leadingAnchor.constraint(equalTo: self.leadingAnchor, constant: 0),
        subview.trailingAnchor.constraint(equalTo: self.trailingAnchor, constant: 0),
        subview.topAnchor.constraint(equalTo: self.topAnchor, constant: 0),
        subview.bottomAnchor.constraint(equalTo: self.bottomAnchor, constant: 0),
    ])
}

我的想法是我可以通过编程将一个视图添加到另一个视图中,我将利用自动布局将子视图的边界与父视图相匹配

当我调用它来将我的 subview 添加到 UIView 超级视图时,它起作用了

然而,当我尝试将我的 subview 添加到 UITextView 超级视图时,subview 坚持从中获取一些 widthheight 约束"content size"。如您所见,我的尾随和底部约束被忽略(控制台中也没有例外)

为了比较,这是我将 UILabel 添加到 UIView 而不是 UITextView

时的运行时约束

我是否可能在这里遗漏了 属性?我需要设置什么?还是这只是尝试向 UITextView 添加子视图的怪癖?

此行为背后的原因是 UITextView 是 UIScrollView。这意味着如果您的子视图没有 height/width,您的布局是不明确的,因此布局引擎会添加固有大小来解决该问题。

这取决于您希望在文本视图中如何或在何处放置子视图,在这种情况下,您需要更具体地说明对齐方式。如果对您有帮助,请查看内容拥抱优先级选项。

但最后我认为你最好不要将标签添加为子视图,如果你可以使用 TextKit 的功能在你的文本视图中设置和定位你计划的标签的内容。