【发布时间】:2017-11-02 12:54:06
【问题描述】:
我正在尝试创建一组UIImageView、UILabel 并像这样以编程方式添加到UIStackView。
var someLetters: [Int: String] = [0:"g",1:"n",2:"d"]
let stackView1 = UIStackView(arrangedSubviews: createLetters(someLetters))
someScrollView.addSubview(stackView1)
func createLetters(_ named: [Int: String]) -> [UIView] {
return named.map { name in
let letterImage = UIImageView()
letterImage.image = UIImage(named: "\(name.key)")
let letterLabel = UILabel()
letterLabel.text = name.value
let subView = UIView()
subView.addSubview(letterLabel)
subView.addSubview(letterImage)
return subView
}
}
UIStackViews arrangedSubviews 只接受UIView 作为参数
所以我创建了一个额外的UIView 作为UILabel 和UIImageView 的容器。没有编译错误,但在屏幕上看不到任何 UI 元素。
我在这里做错了什么?
【问题讨论】:
-
尝试添加宽度和高度约束。一旦我也面临这个问题
-
您需要为 stackView1 添加约束并告诉 stackView1 它将如何安排添加到其中的视图(我认为对于您的情况,它可以平均分配)。
-
UILabel和UIImageView是UIView的子类 - 您可以将它们直接添加到UIStackView- 无需包装它们。 -
这是不正确。您可以将
UIView的任何子类添加到a UIStackView。当您尝试添加UILabel时会发生什么?你看到了什么错误? -
@AshleyMills 你是对的。将
UILabel传递给UIStackView时,我没有收到任何编译错误。不知道为什么它在我第一次尝试时不接受UILabel。谢谢。
标签: ios uiview uiimageview swift4 uistackview