我有这种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
坚持要从“内容”中获取一些width
和height
约束尺寸”。如您所见,我的尾部约束和底部约束都被忽略了(控制台中也没有例外)
为进行比较,以下是将UILabel
而不是UIView
添加到UITextView
时的运行时约束
我可能在这里缺少财产吗?我需要设置的东西?还是只是尝试向UITextView
添加子视图的怪癖?
答案 0 :(得分:1)
此行为背后的原因是UITextView是UIScrollView。这意味着,如果子视图没有高度/宽度,则布局不明确,因此布局引擎会添加固有尺寸来解决该问题。
这取决于您要在文本视图中放置子视图的方式或位置,在这种情况下,您需要更具体地说明对齐方式。如果有帮助,请查看内容优先级选项。
但是最终,我认为如果可以使用TextKit的功能来在文本视图中对计划标签的内容进行样式设置和放置,最好不要添加标签作为子视图。