我在Swift中有点新鲜,我需要一些帮助:
我在UIView中有一个UILabel,这个标签可以接收任何文本。因此,我希望根据收到的文本调整UILabel的大小,并调整其容器UIView的大小。 UILabel必须具有最大宽度但不能具有最大高度。它与带有消息文本的Whatsapp中发生的情况非常类似(他的绿色容器与内部文本一致)。
我相信它是关于自动布局的,但我真的无法理解它的大部分内容。
编辑:动态创建。
任何人都可以帮助我吗?
答案 0 :(得分:2)
包含标签的UIView不应该具有固定的高度。 只需添加约束来设置UIView宽度和X / Y坐标。
在其内部,UILabel应该对UIView的上/下和右/左固定约束,并将其numberOfLines设置为0
使用这些约束,容器视图将展开以根据文本调整高度。
参见随附的截图
添加标签约束(固定约束到所有UIView边缘)
短文字结果
长文字结果
答案 1 :(得分:0)
@Lefteris的答案是正确的。无需定义包含视图的宽度和高度。您只需要在其父边缘约束它,然后将其内部的标签约束在包含视图的边缘。
这是我在代码中的操作方式。
let containingView: UIView = UIView()
containingView.translateAutoresizingMaskIntoConstraints = false
addSubview(containingView)
let labelInside: UILabel = UILabel()
labelInside.translateAutoresizingMaskIntoConstraints = false
containingView.addSubview(labelInside)
NSLayoutConstraint.activate([
//in my case, i want my containingView on the top left corner of the superView.
containingView.leadingAnchor.constraint(equalTo: contentView.leadingAnchor),
containingView.topAnchor.constraint(equalTo: contentView.topAnchor),
labelInside.leadingAnchor.constraint(equalTo: containingView.leadingAnchor),
labelInside.trailingAnchor.constraint(equalTo: containingView.trailingAnchor),
labelInside.topAnchor.constraint(equalTo: containingView.topAnchor),
labelInside.bottomAnchor.constraint(equalTo: containingView.bottomAnchor)
])
现在,如果您想在标签中包含一些边距/插图,则只需在定义约束时添加一个常数即可。 :) HTH
答案 2 :(得分:-1)
下面的属性对我有用,希望这会有所帮助
[label sizeToFit];