我看过涉及自动布局的垂直调整大小的答案,但我创建的 UILabel
仅在运行时需要。 (我可能需要从零到许多这样的标签。)
例子(忽略颜色)
- 短文本(注意与长文本相同的宽度):
- 较长的文本(注意与较短的文本示例相同的宽度,但添加的文本行较多):
如果文本可以容纳在固定宽度的一行中,则标签不需要垂直调整大小。但是如果有更多的字符,标签应该继续垂直扩展以适应这些额外的字符。文本应逐行环绕。文本应从标签的左上角开始。
更具体地说:
let marker = GMSMarker(position: myLatLng)
// see http://stackoverflow.com/a/40211383/1168364 for imageWithView
marker.icon = imageWithView(label) // **how do i create this label?**
marker.map = map // map is a GMSMapView
这些标签可以在屏幕上的任何地方。这适用于 map 应用程序,其中每个标签将放置在随机位置。标签的位置彼此没有关系。
最佳答案
UIView 有两个有用的方法: sizeToFit() 和 sizeThatFits(_:)
第一个将 View 调整到最小尺寸以适应 subview 的内容,第二个根本不改变框架,但返回计算出的尺寸:(1)适合所有 subview 并且(2)不超过参数大小
因此您可以使用 sizeThatFits
来达到您的目的:
let label = UILabel()
override func viewDidLoad() {
super.viewDidLoad()
label.backgroundColor = UIColor.orange
label.textColor = UIColor.white
// label.text = "ultimate Frisbee"
label.text = "ultimate Frisbee\nin 3 minutes,\nall welcome|2"
label.numberOfLines = 10
view.addSubview(label)
updateLabelFrame()
}
func updateLabelFrame() {
let maxSize = CGSize(width: 150, height: 300)
let size = label.sizeThatFits(maxSize)
label.frame = CGRect(origin: CGPoint(x: 100, y: 100), size: size)
}
输出:
附言您也可以使用自动布局约束来解决您的问题,但我不太喜欢以编程方式使用它们。
关于ios - swift:以编程方式创建 UILabel 固定宽度,根据文本长度垂直调整大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40567804/