【问题标题】:Adding multiple UIImages to a UIStackView with the same name将多个 UIImage 添加到具有相同名称的 UIStackView
【发布时间】:2020-01-09 02:29:06
【问题描述】:

我正在尝试根据变量“num”的值将图像添加到堆栈视图。每个奇怪的图像都应该是一个名为“女孩”的图像,甚至是一个名为“男孩”的图像,它们都位于我的资产文件夹中。现在 ViewDidLoad 正在调用 updateSilhouetteView() 函数。 一切都适用于 num

@IBOutlet weak var silhouetteStack: UIStackView!
let boy = UIImageView(image: UIImage(named: "boy"))
let girl = UIImageView(image: UIImage(named: "girl"))
var silhouettes: [UIImageView] = []
var num = 3
func updateSilhouetteView() {
    for n in 0..<num {
        if n % 2 == 0 {
            silhouettes.append(boy)
            silhouettes[n].image = UIImage(named: "boy")
            print("boy")
        } else {
            silhouettes.append(girl)
            silhouettes[n].image = UIImage(named: "girl")
            print("girl")
        }
        silhouettes[n].frame = CGRect(x: 210, y: 500, width: 205, height: 120)
        silhouettes[n].contentMode = .scaleAspectFit
        silhouetteStack.addArrangedSubview(silhouettes[n])
    }
}

【问题讨论】:

  • 你能分享你的代码的 GitHub 链接吗?我认为我的回答应该对您有所帮助,但如果不能,我可以查看您的代码并尝试帮助您。
  • @ParthTamane 我还没有真正的项目。在开始构建实际应用程序之前,我只是将一些东西放入一个空项目中以测试这些概念。我对此很陌生...
  • 好的!你能检查我的回答是否有帮助吗?
  • 我认为@ParthTamane 的回答应该适合你。你这样做的方式只是使用你在 updateSilhouetteView 方法之外创建的原始 UIImageView 对象,而他这样做是为了让你为每次迭代创建一个全新的 UIImageView 引用。

标签: swift xcode uiimageview uiimage


【解决方案1】:

这应该为每个 UIImageView 创建一个新对象并按预期工作。基本上,我正在创建 UIImageView 的新实例,然后将其添加到数组中。您一次又一次地添加相同的实例。结果,堆栈视图只获得了对 2 个不同 UIImageView 实例的引用。

@IBOutlet weak var silhouetteStack: UIStackView!
//let boy = UIImageView(image: UIImage(named: "boy"))
//let girl = UIImageView(image: UIImage(named: "girl"))
var silhouettes: [UIImageView] = []
var num = 3

func viewDidLoad() {
    silhouetteStack.distribution = .fillEqually
}

func updateSilhouetteView() {
    for n in 0..<num {
        if n % 2 == 0 {
            silhouettes.append(UIImageView(image: UIImage(named: "boy")))
            //silhouettes[n].image = UIImage(named: "boy")
            print("boy")
        } else {
            silhouettes.append(UIImageView(image: UIImage(named: "girl")))
            //silhouettes[n].image = UIImage(named: "girl")
            print("girl")
        }
        silhouettes[n].frame = CGRect(x: 210, y: 500, width: 205, height: 120)
        silhouettes[n].contentMode = .scaleAspectFit
        silhouetteStack.addArrangedSubview(silhouettes[n])
    }
}

【讨论】:

  • Parth,感谢您的回复。我复制了你的代码,但我仍然得到相同的结果: num = 1 -> 屏幕上的一个“男孩” num = 2 -> 屏幕上的一个“男孩”和“女孩” num = 3 -> 两个'屏幕上的男孩 num = 4 -> 屏幕上的“男孩”和“女孩”​​pan>
  • Parth,我让它工作了!谢谢你的帮助!关键是添加 ``` silhouetteStack.distribution = .fillEqually ``` 图像都在那里,它们只是堆叠在一起
  • 哦,太好了!这就是您调整代码和学习的方式!我会将其添加到答案中...另外,您可以接受答案吗?
猜你喜欢
  • 1970-01-01
  • 2011-12-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多