【发布时间】:2023-03-31 21:25:01
【问题描述】:
我有两个 UILabel :
let wordLabel = UILabel(frame: CGRectMake(0,0,(self.view.frame.width - 30) / 2,0))
wordLabel.text = word.valueForKey("sanskrit") as? Stringsize: 16)
wordLabel.numberOfLines = 0
wordLabel.sizeToFit()
wordLabel.translatesAutoresizingMaskIntoConstraints = false
let englishWordLabel = UILabel(frame: CGRectMake(wordLabel.frame.width + 10,0,labelWidth,0))
englishWordLabel.text = word.valueForKey("english") as? Stringsize: 16)
englishWordLabel.numberOfLines = 0
englishWordLabel.sizeToFit()
englishWordLabel.lineBreakMode = .ByWordWrapping
englishWordLabel.translatesAutoresizingMaskIntoConstraints = false
基本上,我在 UITableView 的单元格内堆叠了一个数组。
为了整理它,我想给每个 UILabel 大约一半的空间(减去一些填充)。 wordLabel 在左边。 englishWordLabel 在右边。
现在让我大吃一惊的是,如果我删除 sizeToFit 行,那么大小调整就可以了,但是我的整个 wordLabel 完全丢失了。我可以为其添加边框以在预览中查看它,或者调试视图层次结构,它完全不见了。添加sizeToFit,我的标签出现了,但是宽度被忽略了(那部分我理解)。
我考虑过添加约束来完成这项工作,但我不确定这是否是最佳策略。
你会建议做什么来完成这个?
【问题讨论】:
-
您需要自动布局。最简单的方法是水平的
UIStackView设置为Fill Equally;这将允许您几乎毫不费力地让两个标签并排采用相同的宽度。您也可以调整填充。您还可以将标签UIStackView的多个“行”嵌入到垂直UIStackView中。 -
啊酷@RoboticCat。感谢您的建议。究竟什么是“自动布局”?
-
在 IB 中布局视图和视图控制器的原因之一是您可以在设计时获得正确的约束,而不是经历整个代码->编译->测试->代码周期。在 IB 中,您可以在设计时以每个方向查看每个设备的视图和视图控制器。 IB 还将针对不起作用的约束显示错误和警告。出于某种原因,一些开发人员不了解自动布局(当然也不了解它的强大功能),因此我建议您先查看教程。
-
另外,
UIStackViews 会自动为您实现约束,因此您只需将UIStackView固定到视图中的正确位置,然后在UIStackView上设置属性。欲了解更多信息,请观看(免费)WWDC 2015 视频Mysteries of Auto Layout Part 1:developer.apple.com/videos/play/wwdc2015/218。 WWDC 2015 和往年还有其他有用的视频以及示例代码。 -
@RoboticCat 非常酷。很高兴知道。非常感谢您的信息。这是我的第一个 iOS 项目,所以我想学习如何专门从代码和情节提要中制作一些东西。非常感谢您的提示!
标签: ios swift uitableview uilabel constraints